Информация об изменениях

Сообщение Re[2]: Помогите с вариадиками от 09.01.2018 14:06

Изменено 09.01.2018 14:06 SaZ

Re[2]: Помогите с вариадиками
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, SaZ, Вы писали:


SaZ>>Что-то не получается сделать нужные перегрузки.


W>А зачем вообще тут делать перегрузки? Они же лишние и пользы не несут. Просто переименуй первый метод Validate и всё получится:

W>// проверка одного элемента
[cut]
W>template< typename T >
W>bool Validate_1( const Table& table )
W>{
W>    if ( table.Meta() == T::StaticMeta() )
W>    {
W>        Print<T>( table );
W>        return true;
W>    }

W>    return false;
W>}

W>// проверка списка

W>template< typename T = void, typename ...Tables >
W>bool Validate( const Table& table )
W>{
W>    if ( Validate_1<T>( table ) )
W>        return true;

W>    return Validate<Tables...>(table);
W>}

W>template<>
W>bool Validate( const Table& table ) {
W>  return false;
W>}
W>

[/cut]
W>Как бы тут сразу видно, что функции для проверки одного элемента и для проверки списка из одного элемента — разные. Ибо список из одного элемента и сам элемент — тоже вроде разные типы.

Как бы не помогает, пробовал уже. — https://ideone.com/24vOZu.

W>
SaZ>>    bool operator!=(const MetaInfo& rhs) const
SaZ>>    {
SaZ>>        return operator==(rhs);
SaZ>>    }
SaZ>>};
W>
Что-то этот фрагмент тоже выглядит подозрительно

Опечатка же.
Re[2]: Помогите с вариадиками
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, SaZ, Вы писали:


SaZ>>Что-то не получается сделать нужные перегрузки.


W>А зачем вообще тут делать перегрузки? Они же лишние и пользы не несут. Просто переименуй первый метод Validate и всё получится:

[cut]
W>[ccode]
W>// проверка одного элемента
W>template< typename T >
W>bool Validate_1( const Table& table )
W>{
W>    if ( table.Meta() == T::StaticMeta() )
W>    {
W>        Print<T>( table );
W>        return true;
W>    }

W>    return false;
W>}

W>// проверка списка

W>template< typename T = void, typename ...Tables >
W>bool Validate( const Table& table )
W>{
W>    if ( Validate_1<T>( table ) )
W>        return true;

W>    return Validate<Tables...>(table);
W>}

W>template<>
W>bool Validate( const Table& table ) {
W>  return false;
W>}
W>

[/cut]
W>Как бы тут сразу видно, что функции для проверки одного элемента и для проверки списка из одного элемента — разные. Ибо список из одного элемента и сам элемент — тоже вроде разные типы.

Как бы не помогает, пробовал уже. — https://ideone.com/24vOZu.

W>
SaZ>>    bool operator!=(const MetaInfo& rhs) const
SaZ>>    {
SaZ>>        return operator==(rhs);
SaZ>>    }
SaZ>>};
W>
Что-то этот фрагмент тоже выглядит подозрительно

Опечатка же.