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我在之前添加了模板
orevoid 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