我有以下代码:
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 来完成,但我无法让它工作。有什么建议吗?
我实际上不会尝试使用 SFINAE 来执行此操作,尤其是,因为添加到
std
命名空间是未定义的行为,除了某些有限的场景(例如模板专业化)之外。
相反,您可以仅使用
__cplusplus
宏根据支持的级别有条件地编译代码。对于 C++11,它设置为 201103
;对于 C++14,它设置为 201402
,因此应该很容易使用。