是否可以从基础 class 中获取子 class 类型?
Is possible to get type a child class type from base class?
我需要这样的东西:
template <typename T>
class A
{
public:
T commonData;
TYPEOF_CHILD_CLASS *test(T data)
{
return new CHILD_CLASS(data);
}
};
template <typename T>
class B : public A<T>
{
public:
T bdata;
B(T data)
{
bdata = data;
}
};
template <typename T>
class C : public A<T>
{
public:
T cdata;
C(T data)
{
cdata = data;
}
};
int main(int argc, char const *argv[])
{
auto a = C<int>(1).test(2);
return 0;
}
可以用c++定义TYPEOF_CHILD_CLASS吗?在我使用 D 之前。在 D 中它适用于:
R (this R) test(T data)
{
return new R(data);
}
...
void main()
{
auto a = new C!A(1).test(2);
}
这是一个模板。 c++有类似的方法吗?也许我也可以通过模板设置类型?或者我可以通过 typeid
?
确定类型名称
感谢@Some 程序员兄弟@463035818_is_not_a_number。根据 this link 它有效。
template <class T, typename TT>
class A
{
public:
TT commonData;
T *test(TT data)
{
return new T(data);
}
};
template <typename T>
class B : public A<B<T>, T>
{
public:
T bdata;
B(T data)
{
bdata = data;
}
};
template <typename T>
class C : public A<C<T>, T>
{
public:
T cdata;
C(T data)
{
cdata = data;
}
};
int main(int argc, char const *argv[])
{
auto a = C<int>(1).test(2);
return 0;
}
我需要这样的东西:
template <typename T>
class A
{
public:
T commonData;
TYPEOF_CHILD_CLASS *test(T data)
{
return new CHILD_CLASS(data);
}
};
template <typename T>
class B : public A<T>
{
public:
T bdata;
B(T data)
{
bdata = data;
}
};
template <typename T>
class C : public A<T>
{
public:
T cdata;
C(T data)
{
cdata = data;
}
};
int main(int argc, char const *argv[])
{
auto a = C<int>(1).test(2);
return 0;
}
可以用c++定义TYPEOF_CHILD_CLASS吗?在我使用 D 之前。在 D 中它适用于:
R (this R) test(T data)
{
return new R(data);
}
...
void main()
{
auto a = new C!A(1).test(2);
}
这是一个模板。 c++有类似的方法吗?也许我也可以通过模板设置类型?或者我可以通过 typeid
?
感谢@Some 程序员兄弟@463035818_is_not_a_number。根据 this link 它有效。
template <class T, typename TT>
class A
{
public:
TT commonData;
T *test(TT data)
{
return new T(data);
}
};
template <typename T>
class B : public A<B<T>, T>
{
public:
T bdata;
B(T data)
{
bdata = data;
}
};
template <typename T>
class C : public A<C<T>, T>
{
public:
T cdata;
C(T data)
{
cdata = data;
}
};
int main(int argc, char const *argv[])
{
auto a = C<int>(1).test(2);
return 0;
}