c++ - std::thread 构造函数?专业化?。g++与clang++
问题描述
我需要专门化 std::thread 模板化构造函数。
以下代码使用 g++ 编译良好,而在使用 clang++ (6.0) 编译期间失败。
#include <thread>
class MyThread
{
public:
void start()
{
run();
}
virtual void run(void) {};
};
namespace std
{
template<>
thread::thread<MyThread*>(MyThread*&&)
{
}
}
int main(int argc, char *argv[])
{
std::thread myThread(new MyThread);
return 0;
}
我收到以下错误:
thr2.cpp:18:17: error: expected unqualified-id
thread::thread<MyThread*>(MyThread*&&)
你有什么想法可能是什么问题?问候,垫
解决方案
这是不合法的。您可以根据[namespace.constraints]\2添加规范
除非明确禁止,否则程序可以将任何标准库类模板的模板特化添加到命名空间 std,前提是 (a) 添加的声明依赖于至少一个用户定义的类型,并且 (b) 特化满足标准库对原始模板。
但是,[namespace.constraints]\4继续声明
如果 C++ 程序声明了,那么它的行为是未定义的
- 标准库类模板的任何成员函数的显式特化,
所以你不能这样做。
推荐阅读
- sql - 在 SELECT 语句中,将列值转换为 int,否则将其设为 null
- c# - 通过静态类访问 HttpContext 可以“正确”处理不同的请求
- google-chrome - 定义 Chrome IE 标签特定样式表
- php - PHP Session 不适用于某些(有时)移动用户?
- php - Laravel Cashier 10 未通过作曲家安装
- ios - 如何限制应用程序仅在 iphone 中下载而不在 iPad 中下载
- php - Octobercms - 表单上的 CSRF 保护以防止多次提交
- ios - 将 Xcode 更新到 10.4 版后 Apple Pay 无法正常工作
- java - 具有不同单元格高度的列表视图
- database - SQL * PLUS 在 glogin.sql 文件中定义 CONNECT_IDENTIFIER