【问题标题】:Is there any way to static_assert that template argument is noncopyable?有什么方法可以 static_assert 模板参数是不可复制的?
【发布时间】:2014-02-28 18:24:20
【问题描述】:

有什么方法可以确定某些类型在编译期间是不可复制的? 我需要以下内容:

template<typename T, unsigned long long MaxSize>
struct circular_buffer : boost::noncopyable {
    static_assert(typeof(T) ?????, "T must be noncopyable!");
};

【问题讨论】:

  • 如果不复制 T 对象,T 是否可复制又有什么关系?如果您使用可复制性在不同的实现之间进行选择,那将是有意义的,但我无法想象为什么您希望将某些东西限制为仅适用于不可复制的对象。显然,你可以用不可复制类型做任何事情,你也可以用可复制类型做任何事情。
  • @Casey,T 不是同质类型 - 因为它是最后一个字段,所以有 char 数据 [0]。我需要用于异构类型的 spsc-lockfree 缓冲区 - 我希望它尽可能安全

标签: c++ c++11 typetraits static-assert noncopyable


【解决方案1】:

C++11 具有 is_copy_assignableis_copy_constructible 类型特征。断言两者都是错误的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多