【问题标题】:Can you alias a template members in C++?你可以在 C++ 中给模板成员起别名吗?
【发布时间】:2020-03-11 09:52:24
【问题描述】:

我想重命名 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;

遗憾的是,这种方法不适用于成员变量。 我可以给成员起别名吗?怎么样?

【问题讨论】:

  • 所以你可以使用PushBack(v, x),但不能使用v.PushBack(x)
  • 我建议您硬着头皮使用标准类型及其现有命名约定。它使任何已经精通 C++ 的程序员都更容易理解您的代码。
  • @L.F 很抱歉,但据我所知,标题写得正确,函数可以是 C++ 中类的成员。 'push_back' 是一个函数,是模板类 std::vector 的一部分,因此是该类的成员。
  • @RobertoP.Romero 您的标题没有问题(除了成员函数在技术上不是模板而是模板化实体)。我正在回答“我可以给成员起别名”的问题。
  • @L.F.够公平

标签: c++ stl naming-conventions alias


【解决方案1】:

您只能alias types or type templates。成员函数不是类型,因此您不能给它起别名。但是你可以为它做一个代理:

template <typename T>
auto push_back(std::vector<T>& vec, T&& val)
{
    return vec.push_back(std::forward<T>(val));
}

【讨论】:

    【解决方案2】:

    不,你不能给成员变量取别名。

    Cf https://docs.microsoft.com/en-us/cpp/cpp/aliases-and-typedefs-cpp?view=vs-2019:“您可以使用别名声明来声明一个名称,以用作先前声明的类型的同义词”

    既然可以直接调用变量,那么给变量起别名有什么意义?

    【讨论】:

      猜你喜欢
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多