簡體   English   中英

構造函數的顯式模板特化

[英]Explicit template specialization for constructor

我有一個模板類,帶有一個復制構造函數:

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中存在問題:

錯誤C2976:'ExampleClass':模板參數太少

根據另一個主題 ,我為MSVC嘗試了一個更簡單的代碼:

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

但它也行不通。

有沒有辦法在MSVC 2012中為模板類指定模板復制構造函數?

我不知道為什么會這樣,因為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_)
{
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM