C++ C++;函数重载模板值

C++ C++;函数重载模板值,c++,function,templates,C++,Function,Templates,我在使用默认值声明模板函数时遇到了问题。 我不是在寻找类似于void do\u thing(){,而是一个用void do\u thing(){之类的语法重写另一个模板化函数的函数,我知道这在类中是可能的,例如(): 模板 阶级因素{ 公众: 枚举{RESULT=i*因子::结果}; }; 等级系数{ 公众: 枚举{RESULT=1}; }; 其中引用因子不会指向上面的类声明,而是指向底部。我的问题是,我不能对声明函数执行相同的操作。我的语法错误或这是不可能的。 下面是我尝试使用的代码示例:

我在使用默认值声明模板函数时遇到了问题。 我不是在寻找类似于
void do\u thing(){
,而是一个用
void do\u thing(){
之类的语法重写另一个模板化函数的函数,我知道这在类中是可能的,例如():

模板
阶级因素{
公众:
枚举{RESULT=i*因子::结果};
};
等级系数<1>{
公众:
枚举{RESULT=1};
};
其中引用因子不会指向上面的类声明,而是指向底部。
我的问题是,我不能对声明函数执行相同的操作。我的语法错误或这是不可能的。


下面是我尝试使用的代码示例:

template<int tokens>
void skip_token() {
    for(int i = 0; i++ < tokens;) gettoken();
}

void skip_token<2>() {gettoken(); gettoken();};
模板
void skip_令牌(){
对于(inti=0;i++
在声明语法中,它与上面的代码几乎相同,只是它产生了一个编译器错误,告诉我模板格式化错误


如果可能的,那么请告诉我(当然是如何做到的)。否则,如果这种行为不可能,请温和地告诉我

编辑:已修复

为了解决这个问题,需要一个函数原型作为两个模板化函数的基础。 例如
模板
void skip_token();
在头文件或以上声明中。 另外,
模板
无效跳过令牌()之前是必需的。
这些只是示例。对于阅读此问题的人来说,用适合您需要的代码替换此代码相当容易。

这是您正在寻找的类型吗?(我知道,这是一个单独的示例,但仍然…)


我相信这就是你想要的:“模板专业化”请注意,您粘贴的代码已损坏,因为您在枚举计算中似乎正在将
i
i
交换。@WhozCraig猜想我不能总是信任教程。您缺少精简的模板参数列表。您需要一个
模板
超出您的专业化范围。@WhozCraig我在之前添加了
模板
ore
void skip_tokens
。编译器说它希望在“啊,一个合适的原型正是我所需要的”之前有一个初始值设定项。这就解决了它。
template<int tokens>
void skip_token() {
    for(int i = 0; i++ < tokens;) gettoken();
}

void skip_token<2>() {gettoken(); gettoken();};
#include <iostream>
#include <cstdlib>

void gettoken()
{
    std::cout << "gettoken" << '\n';
}

// general decl
template<size_t n> void skip_token();


// impl
template<size_t n>
void skip_token()
{
    gettoken();
    skip_token<n-1>();
}

// specialize
template <>
void skip_token<1>()
{
    gettoken();
}

int main()
{
    skip_token<4>();
    return EXIT_SUCCESS;
}
gettoken
gettoken
gettoken
gettoken