考虑以下功能:
// Declaration in the .h file
class MyClass
{
template <class T> void function(T&& x) const;
};
// Definition in the .cpp file
template <class T> void MyClass::function(T&& x) const;
如果类型noexcept
不可构造,我想创建此函数T
。
怎么做? (我的意思是语法是什么?)
答案 0 :(得分:21)
像这样:
#include <type_traits>
// Declaration in the .h file
class MyClass
{
public:
template <class T> void function(T&& x) noexcept(std::is_nothrow_constructible<T>::value);
};
// Definition in the .cpp file
template <class T> void MyClass::function(T&& x) noexcept(std::is_nothrow_constructible<T>::value);
但请同时查看Why can templates only be implemented in the header file?。您(通常)无法在源文件中实现模板。
答案 1 :(得分:7)
noexcept可以接受表达式,如果表达式的值为true,则声明该函数不会抛出任何异常。所以语法是:
class MyClass
{
template <class T> void function(T&& x) noexcept (noexcept(T()));
};
// Definition in the .cpp file
template <class T> void MyClass::function(T&& x) noexcept (noexcept(T()))
{
}
编辑:使用std::is_nothrow_constructible<T>::value
如下所示,这种情况不那么脏了