Можно ли объявить псевдоним вложенного типа, используя заранее объявленный класс в C ++ 11?

Я разбиваю циклическую зависимость включений, объявляя класс в соответствующем заголовке, однако это приводит к небольшому затруднению в существующем соглашении об использовании псевдонима типа внутри класса:

#include <memory>

class C {
public:
using Ptr = std::shared_ptr<C>;
};

В идеале было бы возможно сделать что-то вроде:

#include <memory>

class C;
using C::Ptr = std::shared_ptr<C>;

Но это невозможно, потому что C не полный тип (пока). Я понимаю, что возможно создать псевдоним using CPtr = std::shared_ptr<C>;, но я надеялся, что упустил что-то очевидное, используя typename или какое-то другое ключевое слово, которое установит C как достаточно полный тип для создания псевдонима вложенного типа.

0

Решение

Нет, вы не можете поместить что-то в класс, кроме как в действительности написав это внутри определения класса.

Это не вопрос того, C это полный тип или нет. Просто C ++ не имеет никакого синтаксиса, позволяющего добавлять имя в область видимости класса (или любую область видимости), кроме как путем фактического написания его в этой области видимости.

2

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

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

По вопросам рекламы [email protected]