仅当 STL 未提供时才有条件声明 make_unique,否则,使用 std::make_unique 声明

问题描述 投票:0回答:1

我有以下代码:

namespace notstd{
  // Only Declare this if std::make_unique exists
  using std::make_unique; 
  
  // Only Declare this if std::make_unique DOES NOT exist
  template<class T,class...Args> //
  std::unique_ptr<T> make_unique(Args&&...args){
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
  }
}

我希望仅在定义了 std::make_unique 时才声明 using 声明(

std::make_unique
直到 C++14 才存在),否则,我想定义我的本地版本。我相信这可以通过 C++11 中的 SFINAE 来完成,但我无法让它工作。有什么建议吗?

c++ sfinae
1个回答
0
投票

我实际上不会尝试使用 SFINAE 来执行此操作,尤其是,因为添加到

std
命名空间是未定义的行为,除了某些有限的场景(例如模板专业化)之外。

相反,您可以仅使用

__cplusplus
宏根据支持的级别有条件地编译代码。对于 C++11,它设置为
201103
;对于 C++14,它设置为
201402
,因此应该很容易使用。

© www.soinside.com 2019 - 2024. All rights reserved.