是否可以定义interface,例如:
class IFoo
{
virtual void foo(const X &x) const = 0;
virtual void foo(X &x) = 0;
};
并在子类foo
中用模板定义两个C
方法,该模板可以实例化两次,一次用于类型实参<const X>
,一次用于<X>
?例如:
class C : public IFoo
{
template<typename T>
void foo(T &t) {...}
};
// instantiate void C::foo(X &x)
// and void C::foo(const X &x) const ???
答案 0 :(得分:2)
模板函数不能是虚拟的,因此即使您能够根据template参数应用常量性,也不会覆盖虚拟函数。例如,以下代码无法在带有以下内容的g ++(4.8.5)上编译:{{1}}
error: templates may not be ‘virtual’
答案 1 :(得分:-1)
据我所知,这是不可能的。 C ++允许使用附加的编译时bool条件指定noexcept
,但是对于const
而言,这是不正确的。可以选择指定
template<typename T>
void foo(T &t) const(std::is_const_v<T>)
{
}
会很好。