具有非虚拟接口的模板类中的虚拟私有方法中的auto decltype

时间:2014-10-04 21:41:35

标签: c++ templates c++11 auto decltype

这个问题主要是出于好奇。

我已经实现了一个带有非虚拟接口的模板类。我有一个具有公共非虚方法的类,然后调用私有虚方法。以下是我的代码的简化。

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。我将我的代码简化为此问题的最小值。我为其中的任何拼写错误道歉。

0 个答案:

没有答案