voglio usare un puntatore a un membro della classe come parametro di template come in:puntatore a membro della classe come parametro di template
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
Utilizzando questa struct come MyStruct<SomeClass, SomeResult, &SomeClass::value> variable
funziona bene, ma non mi piace che devo specificare SomeClass
e SomeResult
.
Vorrei utilizzare MyStruct<&SomeClass::value> variable
se ciò è possibile, ma senza perdere la possibilità di passare alcuna classe e avere alcun tipo di risultato.
Ho provato quanto segue, ma la sintassi è illegale:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
error: too many template-parameter-lists
Ho provato ad utilizzare una funzione di supporto (che funziona veramente in Clang, ma viene rifiutato da GCC):
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
error: use of parameter `member' outside function body
error: template argument 3 is invalid
e 'possibile avere un semplice MyStruct<&SomeClass::value>
, e se sì, come?
questione connessa che non ha risolto la mia domanda:
- Pointer to class member as template parameter
- C++0x error with constexpr and returning template function
Dup? http://stackoverflow.com/questions/5628121/is-it-possibile-per-e-mulare-templateauto-x – GManNickG
@GManNickG Non sono sicuro se la mia domanda si riduce a quell'altra domanda. Il mio è molto più stretto, e non sarei troppo contento di usare una macro. – kay
Il termine è * puntatore-a-membro *, non * riferimento * al membro. Riferimenti e puntatori sono abbastanza diversi nella lingua (beh, non * che * diverso, ma non è lo stesso) –