【发布时间】:2011-04-20 19:12:25
【问题描述】:
是否可以在模板类中隐藏一些成员函数? 假设我们有类似的东西:
template <class T>
class Increment
{
public:
void init(T initValue)
{
mValue = initValue;
}
T increment()
{
++mValue;
}
T increment(T delta)
{
mValue += delta;
}
private:
T mValue;
};
目标是在某些情况下以某种方式使用此类 我们只看到 increment() 函数,在其他一些情况下 我们只看到 increment(T) 成员函数。 为此,我可以考虑使用 SFINAE:
class MultipleIncrement
{
typedef int MultipleIncrement_t;
};
class SingleIncrement
{
typedef int SingleIncrement_t;
};
template <class T, class Q>
class Increment
{
public:
void init(T initValue)
{
mValue = initValue;
}
T increment(typename Q::SingleIncrement_t = 0)
{
++mValue;
}
T increment(T delta, typename Q::MultipleIncrement_t = 0)
{
mValue += delta;
}
private:
T mValue;
}
然后使用我的模板,例如:
Increment<long, MultipleIncrement>
但是,编译器不允许我这样做。 还有其他可行的方法吗? 如果成员函数实际上是构造函数,它也可以工作吗?
【问题讨论】:
-
出于兴趣,您使用的是什么编译器?