我不知道如何用C++ 0x编译器构建Boost.必须给bjam哪个选项?是否应修改user.config文件?有人可以帮助我吗?
最好的,维森特
可以定义Traits类来检查C++类是否具有成员变量,函数或类型(请参阅此处).
奇怪的是,ConceptTraits不包含检查C++类是否定义默认构造函数或给定构造函数的特征?
可以使用特征来检查构造函数的存在吗?如果有,怎么样?如果没有,为什么不可能呢?
我正在做一个广泛使用线程局部变量的库.你能指出一些基准测试来测试在C++中获取线程局部变量的不同方法的性能:
C++ 0x thread_local在提供它的编译器上执行得更好吗?
C++ 0x线程库或Boost.thread定义非成员可变参数模板函数,锁定所有锁定以避免死锁.
template <class L1, class L2, class... L3> void lock(L1&, L2&, L3&...);
Run Code Online (Sandbox Code Playgroud)
虽然此函数避免了死锁的帮助,但标准不包括用于编写异常安全代码的关联范围锁.
{
std::lock(l1,l2);
// do some thing
// unlock li l2 exception safe
}
Run Code Online (Sandbox Code Playgroud)
这意味着我们需要使用其他机制作为try-catch块来制作异常安全代码或者在我们自己的多个互斥锁上定义我们自己的作用域锁定甚至这样做
{
std::lock(l1,l2);
std::unique_lock lk1(l1, std::adopted);
std::unique_lock lk2(l2, std::adopted);
// do some thing
// unlock li l2 on destruction of lk1 lk2
}
Run Code Online (Sandbox Code Playgroud)
例如,为什么标准不包括相同类型的多个互斥锁的范围锁定
{
std::array_unique_lock<std::mutex> lk(l1,l2);
// do some thing
// unlock l1 l2 on destruction of lk
}
Run Code Online (Sandbox Code Playgroud)
或互斥的元组
{
std::tuple_unique_lock<std::mutex, std::recursive_mutex> lk(l1,l2);
// do some thing
// unlock l1 l2 …Run Code Online (Sandbox Code Playgroud) C++ 0x添加了显式转换运算符,但必须始终将它们定义为Source类的成员.这同样适用于赋值运算符,它必须在Target类上定义.
当所需转换的Source和Target类彼此独立时,Source既不能定义转换运算符,也不能定义来自Source的构造函数.
通常我们通过定义一个特定的函数来获得它
Target ConvertToTarget(Source& v);
Run Code Online (Sandbox Code Playgroud)
如果C++ 0x允许非成员函数重载转换运算符,我们可以例如在不相关的类型之间隐式或显式地定义转换.
template < typename To, typename From >
operator To(const From& val);
Run Code Online (Sandbox Code Playgroud)
例如,我们可以专门从chrono :: time_point到posix_time :: ptime的转换,如下所示
template < class Clock, class Duration>
operator boost::posix_time::ptime(
const boost::chrono::time_point<Clock, Duration>& from)
{
using namespace boost;
typedef chrono::time_point<Clock, Duration> time_point_t;
typedef chrono::nanoseconds duration_t;
typedef duration_t::rep rep_t;
rep_t d = chrono::duration_cast<duration_t>(
from.time_since_epoch()).count();
rep_t sec = d/1000000000;
rep_t nsec = d%1000000000;
return posix_time::from_time_t(0)+
posix_time::seconds(static_cast<long>(sec))+
posix_time::nanoseconds(nsec);
}
Run Code Online (Sandbox Code Playgroud)
并将转换用作任何其他转换.
有关该问题的更完整描述,请参阅此处或我的Boost.Conversion 库.
所以问题是:非允许使用非成员函数重载C++转换运算符的理由是什么?
C++ 0x N3092声明monotonic_clock是可选的:
20.10.5.2类monotonic_clock [time.clock.monotonic]
类monotonic_clock的对象表示time_point的值随着物理时间的推移而永不减少的时钟.如果system_clock :: is_monotonic为true,monotonic_clock可能是system_clock的同义词.
类monotonic_clock是有条件支持的.
我可以使用SFINAE或其他技术来定义特征类来确定是否定义了monotonic_clock?
如果没有,是否应该有一个标准的宏来指示monotonic_clock是否可用?
我想知道您是否有一些链接指向从C迁移到C++的指南.
我主要感兴趣的是检查C代码中可能存在编译器无法检测到的问题的结构?什么是变通方法?
注意:请不要回答编译器能够检测到的事情.
我想在嵌入式环境中使用C和模板,我想知道用C++编译器编译C程序的成本是多少?
我很想知道是否会有比C编译器生成的代码更多的代码.
请注意,由于程序是C程序,因此期望无异常地调用C++编译器并支持RTTI.
谢谢,维森特