模板显式实例化具有不同主体的方法

时间:2011-06-22 07:36:32

标签: c++ templates

我有一个带有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本身应该能够作为模板存在。

4 个答案:

答案 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 )
  {
  }
};