У меня есть теоретический вопрос о шаблонах в C++.
Скажем, у меня есть следующий код:C++ template point to member
struct C{
int val = 15;
};
struct B{
C c;
int k = 9;
};
struct A{
template<typename T, typename FType, FType T::* Field = nullptr>
void test(T& d){
if (Field != nullptr){
int a = d.*Field;
}
}
};
int main(int argc, char *argv[])
{
A a;
B be;
a.test<B, int, &B::c::val>(be);
//a.test<B, int, &B::k>(be);
}
Вопрос: почему я не могу получить доступ к B :: C :: вали поля, когда я могу получить доступ B :: k?
B :: c :: val также является членом B. Или нет?
int val = 15; это неправильно внутри structre ... использовать конструкторы, чтобы иметь начальное значение. – Nik
Нет такой вещи, как 'B :: c :: val'. У вас может быть только класс или имя пространства имен слева от '::'. 'B :: c' не является ни тем, ни другим. Это не имеет никакого отношения к шаблонам. –
это будет работать «a.test (be.c)» –
Nik