假设我们有以下文件:
foo.h
namespace ns
{
template <typename T>
class Foo
{
public:
Foo();
~Foo();
void DoIt();
};
}
foo.cpp
#include "foo.h"
#include <iostream>
namespace ns
{
template <typename T>
Foo<T>::Foo() { std::cout << "Being constructed." << std::endl; }
template <typename T>
Foo<T>::~Foo() { std::cout << "Being destroyed." << std::endl; }
template <>
void Foo<int>::DoIt()
{
std::cout << "Int" << std::endl;
}
template <>
void Foo<double>::DoIt()
{
std::cout << "Double" << std::endl;
}
template class Foo<int>;
template class Foo<double>;
}
假设类型只会与 int 或 double 作为类型参数一起使用,这是进行显式实例化的正确方法吗?或者您是否还需要在头文件中声明显式特化?
以我展示的方式与 Visual Studio 一起工作,但一位同事在 GCC 上遇到了问题(虽然我刚刚检查过,我认为这是由于其他原因,但无论如何我都会发布这个问题)