Я хочу использовать указатель на член класса в качестве параметра шаблона, как в:
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>
, и если да, то как?
Связанный с этим вопрос, который не разрешил мой вопрос: