LINUX.ORG.RU

Будь проклят тот день #2 [С++ template hell]

 ,


0

1

Снова код с винды:

template <typename _param, //  shadows template parm ‘class _param’
    typename _param_ptr = _param*> // shadows template parm ‘class _param_ptr’
class CTest
{
public:
    typedef _param CParam;

    struct STest
    {
    	_param_ptr m_operator;

        inline STest(_param_ptr _param) // declaration of ‘_param_ptr _param’
            : m_operator(_param)
        {
        }
    };
};

Как я понимаю, основная засада в инлайновом методе внутри структуры - он воспринимается как новое объявление класса. Как же тогда передать туда параметр шаблона?

★★★★★

Последнее исправление: eagleivg (всего исправлений: 1)

typedef _param_ptr _param_ptr;

Не имеет эффекта. В STest(да и не только) используй имя _param только для обозначения типа, а не как произвольный идентификатор

Deleted
()

И не используй имена, начинающиеся с подчёркивания или заглавной буквы

Deleted
()

Так нельзя

typedef _param_ptr _param_ptr;
Так тоже нельзя
_param_ptr _param

anatoly
()
Ответ на: комментарий от Deleted

Вот я тоже не мог понять зачем это. Поправил исходное сообщение.

eagleivg ★★★★★
() автор топика

Всё же ясно написано. У тебя переменная _param_ptr _param и тип typename _param называются одинаково. Переименуй либо то, либо то.

По поводу typedef _param_ptr _param_ptr тебе уже писали. Непонятно, чего ты хотел добиться.

При чём тут какой-то там хелл - для меня загадка.

Esper
()
Ответ на: комментарий от Esper

Уже убрал, осталась засада с инлайновым методом внутри структуры

eagleivg ★★★★★
() автор топика
Ответ на: комментарий от anatoly

Да, похоже это работает. Спасибо!

eagleivg ★★★★★
() автор топика

Вендузятник должен страдать.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.