некопируемый статический константный член класса шаблона

У меня нет возможности копирования (наследуется от 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_();

этот код приводит к следующей ошибке (даже без создания экземпляра):

ошибка: нет ‘const custom_namespace custom_namespace_user :: custom_namespace_ ()’ функция-член объявлена ​​в классе ‘custom_namespace_user’

Следующий путь не является законным:

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

Что я должен сделать, чтобы объявить эти два класса (первый как не копируемый статический константный член класса второго)? Это осуществимо?

1

Решение

Ваш код анализируется как объявление функции, а не как определение объекта.

Решение состоит в том, чтобы избавиться от круглых скобок:

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

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector