这个问题主要是出于好奇。
我已经实现了一个带有非虚拟接口的模板类。我有一个具有公共非虚方法的类,然后调用私有虚方法。以下是我的代码的简化。
template< class T >
class MyClass {
public:
SomeOtherClass
some_function(
const T & in )
{
return this->some_function_impl( in );
}
protected:
virtual SomeOtherClass
some_function_impl(
const T & in ) = 0;
};
class MyClassDeriv : public MyClass< int > {
private:
SomeOtherClass
some_function_impl(
const int & in )
{
// do stuff.
return SomeOtherClass( in );
}
};
我想知道我是否可以通过以下方式替换非虚拟MyClass :: some_function方法:
auto
some_function(
const T & in ) -> decltype( this->some_function_impl( in ) )
{
return this->some_function_impl( in );
}
我尝试使用C ++ 11,g ++ 4.8.2,但编译器只是说MyClass没有名为some_function_impl的成员。发生这种情况的原因是什么?
P.S。我将我的代码简化为此问题的最小值。我为其中的任何拼写错误道歉。