Можете ли вы псевдоним членов шаблона в C ++? - PullRequest
0 голосов
/ 11 марта 2020

Я хочу переименовать или псевдоним некоторых частей stl, чтобы они соответствовали соглашениям об именах моего проекта. Пока что переименование типов легко

template<class Type>
using Vector = std::vector<Type>;

Я попытался сделать что-то похожее на псевдонимы членов:

template<class Type>
using Vector::PushBack = std::vector<Type>::push_back;
// and
template<class Type>
using Vector<Type>::PushBack = std::vector<Type>::push_back;

К сожалению, этот подход не работает для переменных-членов. Могу ли я псевдоним членов? Как?

Ответы [ 2 ]

3 голосов
/ 11 марта 2020

Можно использовать только псевдонимы типов или шаблоны типов . Функция-член не является типом, поэтому вы не можете использовать ее псевдоним. Однако вы можете сделать суррогат для этого:

template <typename T>
auto push_back(std::vector<T>& vec, T&& val)
{
    return vec.push_back(std::forward<T>(val));
}
1 голос
/ 11 марта 2020

Нет, вы не можете использовать псевдонимы переменных-членов.

Cf https://docs.microsoft.com/en-us/cpp/cpp/aliases-and-typedefs-cpp?view=vs-2019: "Вы можете использовать объявление псевдонима, чтобы объявить имя для использования в качестве синонима для ранее объявленного введите "

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

...