Tôi muốn sử dụng một con trỏ đến một thành viên lớp như một tham số mẫu như trong:Pointer thành viên lớp như một tham số mẫu
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
Sử dụng struct này như MyStruct<SomeClass, SomeResult, &SomeClass::value> variable
công trình tốt, nhưng tôi không thích tôi phải chỉ định SomeClass
và SomeResult
.
Tôi muốn sử dụng MyStruct<&SomeClass::value> variable
nếu có thể, nhưng không mất khả năng vượt qua bất kỳ lớp nào và có bất kỳ loại kết quả nào.
Tôi đã thử các sau đây, nhưng cú pháp là bất hợp pháp:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
error: too many template-parameter-lists
tôi đã cố gắng sử dụng một hàm helper (mà thực sự làm việc trong Clang nhưng bị từ chối bởi 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
Có thể có đơn giản MyStruct<&SomeClass::value>
và nếu có thì làm cách nào?
câu hỏi liên quan mà không giải quyết câu hỏi của tôi:
- Pointer to class member as template parameter
- C++0x error with constexpr and returning template function
Đúp? http://stackoverflow.com/questions/5628121/is-it-possible-to-emulate-templateauto-x – GManNickG
@GManNickG Tôi không chắc liệu câu hỏi của tôi có chứa câu hỏi khác không. Mỏ hẹp hơn nhiều, và tôi sẽ không quá hạnh phúc khi sử dụng macro. – kay
Thuật ngữ này là * con trỏ tới thành viên *, không * tham chiếu * đối với thành viên. Tham chiếu và con trỏ khá khác nhau trong ngôn ngữ (tốt, không * khác * nhưng vẫn không giống nhau) –