相关疑难解决方法(0)

构造函数有条件地标记为显式

更新: 条件显式使其成为C++ 20草案.更多关于cppreference

cppreference的std ::元组构造页面有一堆的C++ 17的笔记说这样的话:

这个构造函数是explicitif和only if std::is_convertible<const Ti&, Ti>::value至少为falsei

如何编写有条件显式的构造函数?想到的第一种可能性是,explicit(true)但这不是合法的语法.

尝试enable_if失败:

// constructor is explicit if T is not integral
struct S {
  template <typename T,
            typename = typename std::enable_if<std::is_integral<T>::value>::type>
  S(T) {}

  template <typename T,
            typename = typename std::enable_if<!std::is_integral<T>::value>::type>
  explicit S(T) {}
};
Run Code Online (Sandbox Code Playgroud)

有错误:

error: ‘template<class T, class> S::S(T)’ cannot be overloaded
explicit S(T t) {}
Run Code Online (Sandbox Code Playgroud)

c++ c++17

32
推荐指数
2
解决办法
1413
查看次数

标签 统计

c++ ×1

c++17 ×1