![](/img/trans.png)
[英]Explicit template specialization for templated constructor of templated class
[英]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中存在問題:
根據另一個主題 ,我為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.