我试图单独编译我的非类型参数模板,但我遇到了一些问题。我的应用程序有许多操作码,每个操作码都与某些数据和函数相关联,其中许多是相似的,可以在主模板中定义,然后可以将差异放入专用模板中。
所以这是原始的在线代码: (标题)
#include <iostream>
template<int opcode>
class BAR
{
public:
BAR(){};
void foo()
{
std::cout << "BAR<int>::foo()" << std::endl;
}
};
// specialize 1 and 2, otherwise we go with the
// primary definition.
template <>
void BAR<1>::foo()
{
std::cout << "BAR<1>::foo()" << std::endl;
}
template <>
void BAR<2>::foo()
{
std::cout << "BAR<2>::foo()" << std::endl;
}
我有一个简单的&#39;主要&#39;:
int main(int argc, char* argv[])
{
BAR<1> bar_1;
BAR<2> bar_2;
BAR<3> bar_3;
bar_1.foo();
bar_2.foo();
bar_3.foo();
return 0;
}
我成功地将专业设置为&#39; 1&#39;和&#39; 2&#39;进入一个cpp文件,这是 是)我有的: (标题)
#include <iostream>
template<int opcode>
class BAR
{
public:
BAR(){};
void foo()
{
std::cout << "BAR<int>::foo()" << std::endl;
}
};
// specialize 1 and 2, otherwise we go with the
// primary definition.
template<> void BAR<1>::foo() ;
template<> void BAR<2>::foo() ;
(CPP)
#include "Foo.h"
#include <iostream>
template<> void BAR<1>::foo()
{
std::cout << "BAR<1>::foo()" << std::endl;
}
template<> void BAR<2>::foo()
{
std::cout << "BAR<2>::foo()" << std::endl;
}
void x()
{
BAR<1> b1;
BAR<2> b2;
b1.foo();
b2.foo();
}
我对x()函数并不是很疯狂,但如果没有这个,我会得到BAR&lt; 1&gt; :: foo()&amp;的未解析符号。 BAR&lt; 2&gt; :: foo(),如果有更好的方式,我感兴趣(MSVC 13编译器)。
好到目前为止一切顺利。我真的想把函数foo()的主要定义放到CPP中,但我似乎无法正确理解语法:
template<> void BAR<int>::foo()
{
std::cout << "BAR<int>::foo()" << std::endl;
}
这是编译器不允许的,所以我猜是正确的 有效的非类型值。那么用于做这件事的神奇话语是什么?
非常感谢您的帮助。 戴夫。