gpt4 book ai didi

c++ - 构造函数的显式模板特化

转载 作者:行者123 更新时间:2023-11-30 02:51:39 24 4
gpt4 key购买 nike

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

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 中为模板类指定模板复制构造函数?

最佳答案

我不知道为什么会这样,因为 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

关于c++ - 构造函数的显式模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19562680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com