我有一个模板化类,在其中确保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/

10-11 22:46
查看更多