我有这样的课程:
template<class T>
class A{
// lots of methods here
Something get();
};
如果T是特定类,我希望Something get()
成为const Something &get()
。
首先,我尝试用继承来做,但它太乱了。
我是否可以这样做,无需专门设置整个class A
而无需引入第二个模板。
答案 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();