给出场景,
template <bool T>
struct A{
struct B{
int x;
double y;
}
struct C{
char c;
std::string k;
}
using type = std::conditional<T, B, C>::type;
type b;
}
我想访问数据成员,例如:
int main(){
A<true> object_1;
A<false> object_2;
cout << object_1.x;
cout << object_2.k;
}
如果.
(点)运算符可以重载,则有可能。但是,这是不可能的(至少现在是这样)。有没有解决方法可以使示例工作?
答案 0 :(得分:1)
您不能超载.
,这是正确的。但是,如果这也是您的选择,则可以重载->
?
operator->
必须返回本身支持operator->
的类型,例如原始指针适合这样:
template <bool T> struct A
{
struct B
{
int x;
double y;
};
struct C
{
char c;
std::string k;
};
using type = std::conditional<T, B, C>::type;
type b;
type* operator->() { return &b; }
};
您可以像这样使用它:
int main()
{
A<true> object_1;
A<false> object_2;
cout << object_1->x;
cout << object_2->k;
}
答案 1 :(得分:0)
似乎比我想象的要容易:
struct B{
int x;
double y;
}
struct C{
char c;
std::string k;
}
template <bool T>
struct A : public std::conditional <T, B, C>::type{
}