Допустим, у нас есть следующие файлы:
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 (хотя я только что проверил, и я думаю, что это связано с чем-то еще, но я все равно опубликую этот вопрос)
.cpp
файле. - person 101010   schedule 14.04.2015