gpt4 book ai didi

c++ - C++中如何判断arg类型

转载 作者:行者123 更新时间:2023-11-30 20:23:56 25 4
gpt4 key购买 nike

在 gcc 中,我可以使用以下代码:

#define is_t(smth, type) ({int is_t_result; if (__builtin_types_compatible_p(__typeof__(smth), type)) {is_t_result = 1;}; is_t_result;})

但是当我在 googletest(c++) 中运行它时,它会引发

error: expected primary-expression before ‘__typeof__’

是否有替代方案可以在 cpp 中实现 is_t

最佳答案

这是一个非常复杂的问题,因为有许多不同的方法来“检测类型”,具体取决于您想要完成的任务。基本上有两种不同类别的“类型检查”:编译时和运行时。在编译时检查方面,很常见的是在 C++ 模板中使用“duck-typing ”(如果满足隐式要求则有效);然而,在某些情况下这还不够,并且 <type_traits> static_assert 提供更明确地执行要求的方法,同时 decltype 允许引用表达式返回的类型。运行时的类型转换在 C++ 中不太常见(通常它是通过“动态调度”(又名虚拟函数)隐式完成的);然而,在显式检查对象的运行时类型方面,有 dynamic_cast<T> 机制。

长话短说,你的is_t()宏可能最好由 C++ 中的内置类型检测机制替代。如果您使用旧版本的 C++,Boost提供广泛兼容的等效项,可在许多 C++ 编译器以及 C++98 和 C++11 上工作。这样做将使您更清楚该类型的变量的含义。 (例如,它是否被声明为完全相同的类型,它是否具有该运行时类型,它是否被声明为可分配给其他类型的类型)。

关于c++ - C++中如何判断arg类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34891883/

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