模板类不同的返回类型取决于类参数

时间:2015-10-08 17:52:19

标签: c++ templates c++11 specialization

我有这样的课程:

template<class T>
class A{
   // lots of methods here

   Something get();
};

如果T是特定类,我希望Something get()成为const Something &get()

首先,我尝试用继承来做,但它太乱了。

我是否可以这样做,无需专门设置整个class A而无需引入第二个模板。

2 个答案:

答案 0 :(得分:5)

你只需用一种简单易用的英语语言写下来。

div

答案 1 :(得分:2)

您可以使用n.m.解释的std::conditional,或者,如果您需要使用不同的行为,可以使用std::enable_if

struct Something { };

template<typename T>
class Foo
{
  Something something;
public:
  template<typename U = T, typename std::enable_if<!std::is_same<U, float>::value, int>::type = 0> Something get() {
    std::cout << "not specialized called" << std::endl;
    return something;
  }

  template<typename U = T, typename std::enable_if<std::is_same<U, float>::value, int>::type = 0> const Something& get() {
    std::cout << "specialized called" << std::endl;
    return something;
  }
};


Something sm1 = Foo<float>().get();
Something sm2 = Foo<int>().get();