4

クラス内初期化を使用して定義されたメンバーのデフォルト値を直接取得する方法はありますか? 例えば:

struct Test
{
    int someValue = 5;
};

int main(int argc,char *argv[])
{
    auto val = declvalue(Test::someValue); // Something like this; Should return 5
    std::cout<<val<<std::endl;
    for(;;);
    return 0;
}

基本的に、デフォルト値を含む宣言全体を「コピー」するもの ( decltypeに似ています)。そのようなものは存在しますか?

4

1 に答える 1

7

あなたの型がデフォルトで構築可能であれば、独自のものを書くことができますdeclvalue:

template<typename T, typename C>
constexpr T declvalue(T C::* ptr)
{
    return C{}.*ptr;
}

これは次のように使用されます。

int main() {
    cout << declvalue(&Test::someValue) << endl;
}

ライブデモ

この特定のケースは適切に最適化されているように見えますが、用心することをお勧めします。

于 2016-10-27T16:53:38.607 に答える