Могу ли я заполнить параметр шаблона вложенным классом в этом классе? - PullRequest
0 голосов
/ 11 декабря 2018

Например, я получил класс, который выглядит следующим образом:

template <typename T>
class Test {
 public:
  T* t;
   ...
};

тогда (как) я могу расширить класс, похожий на этот?

class TestImplement : Test<TestImplement::TestInner> // the TestInner class is defind in the class {
  class TestInner {};
  ...
};

Так как TestInner определяется после того, где шаблону нужен, этот код недопустим, и предварительное объявление также бесполезно.

1 Ответ

0 голосов
/ 11 декабря 2018

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

Больше думайте о логике, чем о синтаксисе, поскольку определение базового класса может очень отличаться в зависимости от того, чтоего аргумент шаблона таков, и поскольку определение базового класса может очень хорошо повлиять на работу TestInner, вы пытаетесь создать циклическую зависимость, которая просто невозможна в нашей физической реальности.

Вы можете поэкспериментировать сиспользуя TestImplement в качестве аргумента шаблона (CRTP!), а затем ищите typename TemplateArgument::TestInner из базы, но даже если это работает, я сомневаюсь в его ясности.

Вместо этого я бы использовал не вложенный класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...