我有一个模板化类,在其中确保type参数是某些抽象基类的子类,如下所示:
#include <type_traits>
template<typename T>
class Foo
{
static_assert(
std::is_base_of<MyBase, T>::value,
"T must be a descendant of MyBase"
);
void SomeMethod()
{
auto bar = T();
//or
auto bar = T("Constructor with parameter")
bar.someFunctionOnMyBase();
}
};
现在,在C#或Java之类的编程语言中,我可以使用此信息,并使用他的类型信息来调用模板类型上的方法。这样的事情可能吗?如果也可以使用正确的参数调用构造函数,则可以得到加分。
最佳答案
是的,这完全没问题(只要您打算调用的构造函数和类T
的析构函数都可以公开访问)。
事实上,您甚至不需要拥有static_assert
,只要成员函数T::someFunctionOfMyBase
存在(即使它不是MyBase
中定义的成员函数,并且碰巧共享名称) ),仍会编译。
关于c++ - c++ 11使用静态声明的模板参数的行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43670646/