gpt4 book ai didi

C++如何在编译时检查模板参数类的签名

转载 作者:行者123 更新时间:2023-11-28 06:15:52 25 4
gpt4 key购买 nike

在下面的代码中,我试图检查作为第二个模板参数传递给 WTrajectory 的类的签名。在当前实现中,WTrajectory 的构造函数比较模板参数 T 的类型和作为第二个参数传递给它的类型的模板参数。

当前的实现可以执行检查。但是,如果可能的话,我更愿意在编译时执行它。此外,我还想检查模板参数 TWPoint 是否有成员函数 returnTimeTypeID,也是在编译时(可以找到在运行时执行此检查的解决方案这里:link )。

template<typename T>
struct WPoint
{
const std::type_info& returnTimeTypeID(void) const
{return typeid(T);}
};

template<typename T, typename TWPoint>
struct WTrajectory
{
WTrajectory(const TWPoint& wp)
{
compare_types(wp);
}

void compare_types(const TWPoint& wp)
{
if (typeid(T) != wp.returnTimeTypeID())
throw std::runtime_error("Error");
}
};

最佳答案

由于 returnTimeTypeID 是非虚拟的,编译器将在编译时知道 TWPoint 的动态类型。因此,与其进行运行时检查,不如更改您的模板:

template<typename T>
struct WTrajectory
{
typedef T TWPoint;
...

在编译时检查模板类型是否具有特定方法的最佳方法是直接调用该方法。如果它不提供所需的功能,您将收到编译错误。

关于C++如何在编译时检查模板参数类的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30333306/

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