Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 常量模板参数类管理外部链接_C++_Templates - Fatal编程技术网

C++ 常量模板参数类管理外部链接

C++ 常量模板参数类管理外部链接,c++,templates,C++,Templates,我有一个带有枚举模板参数的类foo,出于某种原因,它链接到cpp文件中两个版本的ctor enum Enum { bar, baz }; template <Enum version = bar> class foo { public: foo(); }; // CPP File #include "foo.hpp" foo<bar>::foo() { cout << "bar"; } foo<baz>::foo()

我有一个带有枚举模板参数的类foo,出于某种原因,它链接到cpp文件中两个版本的ctor

enum Enum
{
    bar,
    baz
};

template <Enum version = bar>
class foo
{
public:
    foo();
};

// CPP File
#include "foo.hpp"

foo<bar>::foo() { cout << "bar"; }
foo<baz>::foo() { cout << "baz"; }
enum枚举
{
酒吧,
巴兹
};
模板
福班
{
公众:
foo();
};
//CPP文件
#包括“foo.hpp”

foo::foo(){cout您正在专门化contstructor的两种形式。为什么您对它在中链接两种形式感到惊讶?

可能是因为其中一种没有被引用?因为通常当我链接到模板类时,它的成员不能在cpp文件中实现。@sbi:仅仅因为它没有被引用并不意味着它应该被剥离。编译器“可以”删除它,但决不能保证它。@the_-drow:如果您专门化模板,则可以在CPP文件中实现成员。该代码的行为未定义。您需要在头文件中声明专门化。并且您错过了
模板
前缀。