gpt4 book ai didi

c++ 11使用静态断言模板参数的行为

转载 作者:行者123 更新时间:2023-11-28 05:10:16 24 4
gpt4 key购买 nike

我有一个模板化类,我确保类型参数是某个抽象基类的子类,如下所示:

#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++ 11使用静态断言模板参数的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43670646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com