2

したがって、三項演算子を使用した const/non-const に関する以前の質問に対してtest、C++11 標準に関して次の関数は問題ありません。

template<bool UseConst> class MyClass
{
    public:
        constexpr bool test()
        {
             return (UseConst) ? (_constvar) : (_var);
        }

    protected:
        int _var;
        static const int _constvar;
}

全体の問題は、それ_constvarが const であり、const で_varないことです。同じ関数を介してテンプレート パラメーターに応じてこれら 2 つのデータにアクセスする必要があり、const を使用するときにコンパイル時の関数が必要です。

test()機能は要件を満たしていますか?

4

1 に答える 1

0

関数を「特殊化」するために SFINAE を使用できますtest。つまり、次のようなことができます。

template<bool true_false>
struct true_type
{
    static char value;
};

template<>
struct true_type<false>
{
    static char value[2];
};

template<bool UseConst> class MyClass
{
    private:
        constexpr int pre_test(const char arg) { return _constvar; }
        int pre_test(char (&)[2]) const { return _var; }

    public:
        constexpr int test()
        {
             return pre_test(true_type<UseConst>::value);
        }

    protected:
        int _var;
        static const int _constvar;
};

を呼び出すと、isのMyClass::test場合は実行時関数になりますが、isの場合はコンパイル時関数になります。UseConstfalsetestUseConsttrue

于 2012-09-26T14:27:37.883 に答える