次のように、クラスメンバーへのポインタをテンプレートパラメータとして使用したいと思います。
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
このような構造体を使用すると問題なく動作しますが、とMyStruct<SomeClass, SomeResult, &SomeClass::value> variable
を指定する必要があるのは好きではありません。SomeClass
SomeResult
MyStruct<&SomeClass::value> variable
可能であれば使用したいのですが、クラスをパスして結果タイプを取得する機能を失うことはありません。
次のことを試しましたが、構文が不正です。
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
エラー:テンプレートパラメータリストが多すぎます
ヘルパー関数を使用してみました(実際にはClangで機能しますが、GCCによって拒否されます)。
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
エラー:関数本体の外部でのパラメーター `member'の使用
エラー:テンプレート引数3が無効です
シンプルMyStruct<&SomeClass::value>
にすることは可能ですか?もしそうなら、どのように?
私の質問を解決しなかった関連する質問: