我有一个带有std::vector<T>
构造函数的模板类。对于除了一个之外的每个对象,我都希望它进行操作A.但对于那个对象,我希望它做一些其他的东西B.
是否有可能仅为模板类创建显式实例化的构造函数?我希望它的描述足够精确。
此致
更新:我现在已经实施了一个测试用例:
//header
Container(const std::vector<T>& source)
{...}
//source code
template <> Container<int>::Container(const std::vector<int>& source)
{
throw 42;
}
此示例编译但不起作用。我将它导出到一个DLL,并希望每当我尝试使用泛型参数int创建类的实例时调用它。但就像现在一样,它只调用用于每个其他对象的标准构造函数。我必须对声明做出改变吗?
更新:我成功了!只需将其复制到头文件即可。
更新:好的,现在我还有另外一个问题。我能够为“简单”类型而不是模板进行专门化。我这样试过:
template<typename T>
Container<MyClass<T>>::Container(const std::vecror<MyClass<T>>& source)
{...}
我想为每个MyClass对象专门化它,但MyClass本身应该能够作为模板存在。
答案 0 :(得分:5)
你的问题不明确。也许你的意思是下面这样的东西?
template <typename T>
class Foo
{
public:
Foo() { std::cout << "standard" << std::endl; }
};
template <>
Foo<float>::Foo() { std::cout << "random" << std::endl; } // Special case
...
Foo<int> f1; // Prints "standard"
Foo<float> f2; // Prints "random"
答案 1 :(得分:0)
哪个编译器?
我在使用旧版本的g ++编译器以及Solaris和HPUX c ++编译器时遇到了模板实例化问题。
template <>
用于指定显式实例化。
很长一段时间我没有专门的只有一个类的方法。
你试过吗?
template <> TemplateClass<InstanciedType>::TemplateClass() {
...
}
其中TemplateClass是您要覆盖的模板类instanciation。
答案 2 :(得分:0)
没有办法进行显式构造函数模板实例化 - 这里包含了这个内容:C++ invoke explicit template constructor
答案 3 :(得分:0)
如果我理解你的问题,你想这样做:
template< typename T >
struct A
{
template< typename P >
A( std::vector< P > &v )
{
}
};