- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将 boost.thread 与 metrowerks codewarrior 5.5.3 一起使用;在标题 thread.hpp 中,我收到错误消息,他正在重新定义 thread::thread_data:
class BOOST_THREAD_DECL thread
{
private:
...
template<typename F>
struct thread_data:
detail::thread_data_base
{
F f;
thread_data(F f_):
f(f_)
{}
thread_data(detail::thread_move_t<F> f_):
f(f_)
{}
void run()
{
f();
}
};
...
};
template<typename F>
struct thread::thread_data<boost::reference_wrapper<F> >:
detail::thread_data_base
{
F& f;
thread_data(boost::reference_wrapper<F> f_):
f(f_)
{}
void run()
{
f();
}
};
我看到,实际上,thread::thread_data 似乎被声明了两次。那里使用了什么 C++ 功能?我怎样才能克服编译器的缺陷?
最佳答案
第二个实例是模板类的部分特化,这是有效的 C++,不应导致重定义错误。
我过去在 metrowerks 编译器中也遇到过此类功能的问题,更具体地说,当使用具有默认值的模板模板参数时,编译器永远不会编译它。我的解决方法很简单,不提供默认值...(1)
如果我是你,我会尝试为你的特定类型添加一个完整的特化,并希望编译器为那些使用一些不同的编译路径并让你通过这个......(这只是一个大胆的猜测,这些天我没有/使用 metrowerks 编译器)
typedef boost::function< void () > MyThreadFunction; // or whatever you need
template <>
struct thread::thread_data<boost::reference_wrapper< MyThreadFunction > >:
detail::thread_data_base
{
....
};
(1) 老实说,这是很多年前的事了,我认为当时没有任何编译器完全编译模板。
关于c++ - 用 Metrowerks 编译器解决 boost.thread 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1108709/
我正在学习 Objective-C,我的 friend 有一台真正的 Macintosh IIci,它使用 Mac System 7(特别是带有 68k 处理器的 7.5.5),并且我安装了 Metr
我正在尝试将 boost.thread 与 metrowerks codewarrior 5.5.3 一起使用;在标题 thread.hpp 中,我收到错误消息,他正在重新定义 thread::thr
我的 friend 有真正的 Macintosh IIci,它在 68k 处理器下使用 Mac System 7.5.5,然后我安装了 Metrowerks C/C++ 版本 1,但即使在一个简单的
我是一名优秀的程序员,十分优秀!