Sfinae使得独特
SFINAE make unique
本文关键字:Sfinae 更新时间:2023-10-16
有没有办法检查类型T
是否可以使用variadic Template参数构造 Args...
?我不在乎解决方案是否有效,我只想在调试模式下使用sfinae或 static_assert
。
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args)
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
对于其他有兴趣的其他人,此解决方案在C 11
中对我有用。template<typename T, typename... Args>
auto make_unique(Args&&... args) -> decltype(std::unique_ptr<T>(new T(std::forward<Args>(args)...)))
{
return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
如果您需要一种廉价的方式检查T(Args...)
是否以Sfinae友好的方式是有效的表达式类型:
template <typename T, typename... Args>
auto foo(Args&&... args)
-> decltype(T(std::forward<Args>(args)...), void())
{
}
foo
如果T(std::forward<Args>(args)...)
不是有效的表达式,则会" sfinaed out"。
相关文章:
- 为什么使用SFINAE而不是函数重载
- 如何使用模板函数的函数签名进行SFINAE
- 数据成员SFINAE的C++17测试:gcc vs clang
- 使用在用于SFINAE的void_t中具有参数的方法
- 编译器如何在使用SFINAE的函数和标准函数之间确定两者是否可行
- 提供与TMP和SFINAE的通用接口
- "Inverse SFINAE"避免模棱两可的过载
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何在儿童类中使用SFINAE
- 使用 SFINAE 作为模板参数的编译时递归
- 使用 SFINAE 设计模板方法
- 与SFINAE支票交朋友
- C++许多 SFINAE 风格的过载
- 是否可以混合使用SFINAE和模板专业化?
- C++表达SFINAE和ostream操纵器
- SFINAE不能防止模棱两可的操作员过载吗?
- SFINAE是否取决于类型推断?
- MSVC 无法编译 SFINAE 检查
- SFINAE 检查模板参数运算符
- SFINAE 与 numeric_limits<T>::max() 在 MSVC2017 上