C++-定义2个模板参数,但只调用1个
C++ - Defining 2 template parameters but calling with only 1
在进行一个项目时,我发现了以下代码,我正在努力弄清楚:
enum Attributes { ACTIVE, COMPLETE, POSITION }
template<Attributes NN,typename TT>
TT& Set(TT&& t)
{
return typeList.get<NN>()=t; //typeList is a boost tuple
}
这在稍后的中被调用
object.Set<ACTIVE>(true);
那里只有一个模板参数!如何用两个参数指定一个模板,然后只用一个参数调用它?我认为Set方法应该采用两个模板参数(Attributes和typename),就像std::map一样。
第二个是根据传递给函数的参数类型推导的,在本例中为bool
。
当调用函数模板模板参数时,模板参数是函数参数的类型,可以从参数的类型中自动推导出来,函数调用时使用:
object.Set<ACTIVE>(true); //same as object.Set<Active,bool>(true);
object.Set<ACTIVE>(5); //same as object.Set<Active,int>(5);
这就是为什么可以使用标准库中的模板函数,如std::max
或std::copy
,而不必明确提及参数的类型。
阅读本文
当引用函数模板专用化时模板参数应具有值。这些值可以显式指定的,或者在某些情况下,从使用中推断出来,或者从默认模板参数。
[ Example:
void f(Array<dcomplex>& cv, Array<int>& ci) {
sort(cv); // calls sort(Array<dcomplex>&)
sort(ci); // calls sort(Array<int>&)
}
and
void g(double d) {
int i = convert<int>(d); // calls convert<int,double>(double)
int c = convert<char>(d); // calls convert<char,double>(double)
}
—end example ]
以及本文件第14.8.2段。http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
相关文章:
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 等待整个 omp 块完成,然后再调用第二个函数
- 调用多个类而不带 if 语句
- 如何在构造器的成员初始值设定项列表中调用两个函数?
- C++使用函数对象的线程,如何调用多个析构函数而不是构造函数?
- 在派生类中调用多个虚函数
- 如何在C 中的单个构造函数中调用多个构造函数
- 使用 pylab 调用多个文件
- 为什么我要尝试在一个if语句中调用两个fucntions,但是在第一个完成后它忽略了另一个功能?(C )
- C++错误,隐 <function-style-cast> 式要求使用模板化类一次调用多个构造函数的多个转换
- 调用多个选定函数并节省 RAM 的最佳方式
- 如果要调用多个成员函数,对象编辑器是否是一种好方法?
- 如何设置和调用多个类的私有数据成员
- 调用两个功能(一个stdcall)的方法
- Python C,TBB,调用多个线程的函数
- 如何将 GMock EXPECT_CALL设置为为模拟函数调用两个不同的函数
- 如何在程序中调用 2 个或多个 shellexecute 函数
- C#到C代码P/调用多个std:字符串声明导致堆栈损坏
- 如何依次多次调用3个线程
- 必须调用第一个设计模式