构造函数的显式模板特化

时间:2013-10-24 09:55:55

标签: c++ templates visual-c++ visual-studio-2012

我有一个模板类,带有一个复制构造函数:

struct index_method {/*whatever*/};

template <class A, class B>
class ExampleClass
{
public:
   ExampleClass(void) {}
   template <class C>
   ExampleClass( const ExampleClass<A,C>& src_, const B& b_ = B() ) : _b(b_) { }
private:
   B _b;
};

以下模板构造函数特化由gcc 4.7.0正确编译:

template <>
template <>
ExampleClass<double,index_method>::ExampleClass<index_method>( const ExampleClass<double,index_method>& src_, const index_method& b_ )
  : _b(b_)
{
}

但它在MSVC中存在问题:

  

error C2976: 'ExampleClass' : too few template arguments

基于另一个topic,我为MSVC尝试了一个更简单的代码:

ExampleClass<double,index_method>::ExampleClass<index_method>( const ExampleClass<double,index_method>& src_, const index_method& method_ )
  : _b(method_)
{
}

但它也不起作用。

有没有办法在MSVC 2012中为模板类指定模板复制构造函数?

1 个答案:

答案 0 :(得分:3)

我不知道为什么会这样,因为gcc编译它,但clang拒绝作为MSVC,但有另一个错误。 但是,您只需使用以下代码

即可
struct index_method {/*whatever*/};

template <class A, class B>
class ExampleClass
{
public:
ExampleClass(void) {}
template <class C>
ExampleClass( const ExampleClass<A,C>& src_, const B& b_ = B() ) : _b(b_) { }
private:
B _b;
};

template <>
template <>
ExampleClass<double,index_method>::ExampleClass
( const ExampleClass<double,index_method>& src_, const index_method& b_ )
: _b(b_)
{
}

Example