Возвращение typedef, определенного внутри нетипизированного шаблонного класса

Я ищу создать нетипизированный шаблонный класс с переменными-членами, которые зависят от нетипичного параметра (в частности, собственных матриц фиксированной размерности, но проблема присутствует с int также). Чтобы сделать вещи более понятными, я определял типы членов, что работало замечательно, пока я не хотел, чтобы функция члена вернуть typedef, когда я начал получать следующую ошибку:

myClass.cpp: 10: ошибка: ожидаемый конструктор, деструктор или преобразование типов перед «myClass»

Я понимаю, по крайней мере, концептуально, что это как-то связано с тем фактом, что мой typedef зависит от шаблона и что в результате C ++ запутался. Проблема в том, что я еще больше запутался, я попробовал несколько наивных вставок typename, но это ничего не исправило.

Минимальный рабочий пример.

Заголовок:

template <int i> class myClass
{
public:
typedef int myVector_t;

myClass();
myVector_t myFunc();
};

Исходный код:

#include <myClass.hpp>

template <int i>
myClass<i>::myClass()
{
//blah
}

template <int i>
myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
//blah
}

Буду признателен за понимание.

Как объясняется ниже, решение должно включать typename Ключевое слово в реализации, но не декларация.

typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10

Edit2

Обобщил вопрос от Эйгена

3

Решение

Поскольку имя myVector_t в определении функции эффективно зависит от параметра шаблона, вы должны сообщить компилятору, что это тип с typename:

template <int i>
typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
//blah
}
5

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

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

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