C++函数重载模板值
C++ Function overloading template value
我在用默认值声明模板化函数时遇到了问题
我不是在寻找类似void do_thing<int val = 2>() {
的东西,而是一个用类似void do_thing<2>() {
的语法覆盖另一个模板函数的函数
我知道这在类中是可能的,例如(来自教程):
template< int i >
class FACTOR{
public:
enum {RESULT = i * FACTOR<i-1>::RESULT};
};
class FACTOR< 1 >{
public:
enum {RESULT = 1};
};
其中引用FACTOR<1> 不会转到上面的类声明,而是转到底部
对我来说,问题是我不能在声明函数时做同样的事情。要么我的语法错误,要么这是不可能的
下面是我试图开始工作的代码示例:
template<int tokens>
void skip_token() {
for(int i = 0; i++ < tokens;) gettoken();
}
void skip_token<2>() {gettoken(); gettoken();};
在声明语法中,它与上面的代码几乎相同,只是它产生了一个编译器错误,告诉我模板格式错误。
如果是可能的,请告诉我(当然是怎么做的)。否则,如果这种行为不是,请温和地告诉我。
编辑:已修复
为了解决这个问题,需要一个函数原型作为两个模板化函数的基础。例如头文件中的template<int tokens>
void skip_token();
或以上声明
此外,template<>
在void skip_token<2>()
之前是必需的
这些只是例子。对于阅读此问题的人来说,用符合您需求的代码替换此代码是相当容易的。
这是你想要的东西吗?(我知道,这是一个单独的例子,但仍然…)?
#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
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?