【发布时间】:2012-04-15 00:31:21
【问题描述】:
在尝试让访问存储类变得更容易一些之后,我最终陷入了一种我没有太多知识的情况。而且,要找到和我做同样事情的人并不容易。
我想要做的是有一个类,它在内部将值数组存储为字符串,但允许从用户端进行简单的类型转换。我计划做的是使用数组下标运算符返回他们通过模板指定的任何类型。虽然,这听起来比实际工作要好得多。这是我正在做的一个简单示例,让您了解它应该如何工作。
class StringList
{
public:
template <typename T>
T operator[](const int i)
}
从那里,我会定义一些特定的模板,如果需要,任何用户都可以很容易地定义更多。但是,最大的问题是,我不知道如何用模板调用下标运算符。起初我假设以下(这显然是不正确的),考虑到它类似于调用模板方法的标准方式。
StringList list;
T var = list<T>[0];
有谁知道将下标运算符作为模板调用的正确方法?或者,我应该避免这样做,而是使用命名方法吗?
【问题讨论】:
-
我会警告不要为此重载
operator[],因为重载运算符最适合在语法上有意义时使用。你通常不会写像list<T>[0]这样的东西,我认为额外的智力开销是不值得的。为什么不直接制作一个模板get方法并调用list.get<int>(0)? -
@templatetypedef 我完全同意。考虑到我什至不明白你会如何编写这样的模板,我很可能会坚持使用像 get 这样的命名函数。但是,我很想知道它是如何编写的,无论我是否需要使用它。
标签: c++ templates operator-overloading metaprogramming