C++ noexcept 规范取决于数据成员
C++ noexcept specification depending on data members
这个声明没问题:
void memberFunction(T& functor, double value)noexcept(noexcept(functor(value)));
对于
template<class T>
class MyClass{
public:
void memberFunction(T& functor, double value)noexcept(noexcept(functor(value)));
};
假设 MyClass 有一个仿函数数据成员:
template<class T>
class MyClass{
public:
//ctor
...
void memberFunction(double value);
private:
T functor;
};
我想像在前一个案例中那样编写 noexcept 规范,
我试过这个:
void memberFunction(double value)noexcept(noexcept(functor(value)));
但是编译器告诉我仿函数不是作用域。
由于类似的原因,以下内容不起作用:
void memberFunction(double value)noexcept(noexcept(this->functor(value)));
以下无法使用,因为我有一些 类 用作缺少的 T
默认构造函数:
void memberFunction(double value)noexcept(noexcept(T()(value)));
以下语法错误:
void memberFunction(double value)noexcept(noexcept(T::operator(double)));
尽管它形象地解释了我想要的东西。
有什么建议吗?
目前我放弃了规范...
noexcept
规范是 memberFunction
声明的一部分,因此无法访问之后声明的任何成员数据。
简单的解决方法是将 functor
的声明移动到 memberFunction
上方:
template<class T>
class MyClass{
private:
T functor;
public:
//ctor
...
void memberFunction(double value);
};
std::declval<T>()
模拟右值 T
实例。 std::declval<T&>()
模拟左值 T
实例。用这个代替 T()
.
这个声明没问题:
void memberFunction(T& functor, double value)noexcept(noexcept(functor(value)));
对于
template<class T>
class MyClass{
public:
void memberFunction(T& functor, double value)noexcept(noexcept(functor(value)));
};
假设 MyClass 有一个仿函数数据成员:
template<class T>
class MyClass{
public:
//ctor
...
void memberFunction(double value);
private:
T functor;
};
我想像在前一个案例中那样编写 noexcept 规范, 我试过这个:
void memberFunction(double value)noexcept(noexcept(functor(value)));
但是编译器告诉我仿函数不是作用域。 由于类似的原因,以下内容不起作用:
void memberFunction(double value)noexcept(noexcept(this->functor(value)));
以下无法使用,因为我有一些 类 用作缺少的 T 默认构造函数:
void memberFunction(double value)noexcept(noexcept(T()(value)));
以下语法错误:
void memberFunction(double value)noexcept(noexcept(T::operator(double)));
尽管它形象地解释了我想要的东西。
有什么建议吗? 目前我放弃了规范...
noexcept
规范是 memberFunction
声明的一部分,因此无法访问之后声明的任何成员数据。
简单的解决方法是将 functor
的声明移动到 memberFunction
上方:
template<class T>
class MyClass{
private:
T functor;
public:
//ctor
...
void memberFunction(double value);
};
std::declval<T>()
模拟右值 T
实例。 std::declval<T&>()
模拟左值 T
实例。用这个代替 T()
.