【发布时间】:2021-06-09 22:05:13
【问题描述】:
我有这样的功能:
template <typename T>
void modify(T& x) {
...
}
我想为Foo 类型添加一个专门的重载,如下所示:
void modify(Foo& x) {
...
}
但是,这会带来一个问题,即如果 Foo 类型不存在,则此定义将无法编译,但我希望在这种情况下仍然可以编译此标头,只是省略了该重载(逻辑上)。毕竟,如果用户没有包含该类型的定义,Foo 重载将毫无用处。
【问题讨论】:
-
您的应用程序是否允许以某种方式注册该类型?然后它就变成了一件容易的事。否则我认为这是不可行的。
-
定义
__m256i的头文件是否定义了某些东西(可能是包含保护)?如果是这样,您可以#ifdef(喘气)关闭它。不过可能不太便携, -
如果此函数位于定义 __m256i 之前的头文件中,则将无法包含重载 如果您希望重载编译/存在,则头文件定义
__m256i必须先包含,不是吗? -
C++ 没有“如果类型 xxx 存在”结构,不幸的是。它需要编译器支持,但它不存在。
-
this approach 问题是之后你不能实际使用
A,只能使用::A:coliru.stacked-crooked.com/a/fd8ebac5cb93a599