gpt4 book ai didi

c++ - 模板类中不可复制的静态常量成员类

转载 作者:行者123 更新时间:2023-11-30 02:58:48 25 4
gpt4 key购买 nike

我有一个不可复制的(继承自 boost::noncopyable)类,我将其用作自定义命名空间。另外,我还有另一个类,它使用以前的类,如下所示:

#include <boost/utility.hpp>
#include <cmath>

template< typename F >
struct custom_namespace
: boost::noncopyable
{

F sqrt_of_half(F const & x) const
{
using std::sqrt;
return sqrt(x / F(2.0L));
}

// ... maybe others are not so dummy const/constexpr methods

};

template< typename F >
class custom_namespace_user
{

static
::custom_namespace< F > const custom_namespace_;

public :

F poisson() const
{
return custom_namespace_.sqrt_of_half(M_PI);
}

static
F square_diagonal(F const & a)
{
return a * custom_namespace_.sqrt_of_half(1.0L);
}

};

template< typename F >
::custom_namespace< F > const custom_namespace_user< F >::custom_namespace_();

此代码会导致下一个错误(即使没有实例化):

错误:类“custom_namespace_user”中没有声明“const custom_namespace custom_namespace_user::custom_namespace_()”成员函数

下一种方式不合法:

template< typename F >
::custom_namespace< F > const custom_namespace_user< F >::custom_namespace_ = ::custom_namespace< F >();

我应该如何声明这两个类(第一个是第二个不可复制的静态常量成员类)?这可行吗?

最佳答案

您的代码被解析为函数声明,而不是对象定义。

解决方案是去掉括号:

template< typename F > ::custom_namespace< F > const custom_namespace_user< F >::custom_namespace_;

关于c++ - 模板类中不可复制的静态常量成员类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13458546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com