gpt4 book ai didi

c++ - GCC 中不可避免的可变参数模板(与 CUDA 一起使用)?

转载 作者:太空狗 更新时间:2023-10-29 21:28:33 25 4
gpt4 key购买 nike

我在 Linux/GCC 上尝试一些 CUDA/Thrust 代码并想使用一些 TR1 库,当我注意到一些奇怪的东西时:大多数库总是会引入 tr1_impl/type_traits (4.4) 或只是 type_traits (4.6),并且该 header 将始终包含可变参数模板,如下所示:

  template<typename _Res, typename... _ArgTypes>
struct is_function<_Res(_ArgTypes...)>
: public true_type { };

但是,当我在 C++98 或 C++03 模式下运行 GCC 时,也会使用这些 header !这怎么行?

我遇到的实际问题是 CUDA 工具链不识别 C++0x 结构,cudafe++(CUDA 前端,即把 union 源代码分成主机和设备源代码)在遇到可变参数模板参数时正确地中止并出错。

那么... GCC 如何支持和依赖 C++ 的非 0x 方言中的可变参数模板?有没有办法获得真正的 C++03 版本的 TR1?

最佳答案

好吧,实现不需要提供标题。需要 #include <stuff>做正确的事。因此,这意味着如果一个实现决定为此功能使用 header ,则不需要这些 header 符合 C++。事实上,GCC 已经支持可变参数模板作为扩展很长一段时间了。

此外,我不禁注意到

#pragma GCC system header

<tr1/random>你提到的标题。 GCC will treat the file specially ,例如不报告其中的错误警告。我原以为在一致模式下使用扩展很容易变成错误,所以我不确定发生了什么,但至少在法律上这是一个选择。

还有TR1的特殊地位,不具有约束力。到目前为止,在我的实现中,我可以告诉唯一的 C++03 header 包含 <type_traits><functional>并且它仅在 C++0x 模式下正确地执行此操作(即,其余时间它是通过预处理的有效 C++03 文件,与 <tr1/random> 不同)。 (不过我没有检查其他情况。)

关于c++ - GCC 中不可避免的可变参数模板(与 CUDA 一起使用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739785/

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