gpt4 book ai didi

C++ 数组下标运算符模板

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:58 25 4
gpt4 key购买 nike

在尝试使对存储类的访问变得更容易一些之后,我最终陷入了一种我没有太多知识的境地。而且,要找到和我做同样事情的人并不容易。

我想做的是,有一个类在内部将值数组存储为字符串,但允许从用户端进行简单的类型转换。我计划做的是使用数组下标运算符返回他们通过模板指定的任何类型。虽然,这听起来比实际工作要好得多。这是我正在做的一个简单示例,让您了解它应该如何工作。

class StringList
{
public:
template <typename T>
T operator[](const int i)
}

从那里,我会定义一些特定的模板,如果需要,任何用户都可以很容易地定义更多。但是,最大的问题是,我不知道如何用模板调用下标运算符。考虑到它类似于调用模板方法的标准方式,起初我假设如下(这显然是不正确的)。

StringList list;
T var = list<T>[0];

有谁知道调用下标运算符作为模板的正确方法吗?或者,我应该避免这样做,而使用命名方法吗?

最佳答案

调用您的运算符(operator)的唯一方法是显式写入 list.operator[]<T>() .

有两种基本的出路:

  1. 写一个像list.get<int>()这样的函数模板(由 templatetypedef 提议)
  2. 将自动对话的代理返回给T .

代码如下:

// in the class
struct proxy {
proxy(StringList *list, int i) : list(list), i(i) {}
StringList *list;
int i;
template <typename T>
operator T() { return list->get<T>(i); }
};

proxy operator[](int i) { return proxy(this, i); }

template <typename T>
T get(int i) { return ...; T(); }

// how to use it:
StringList list;
int var = list.get<int>(0);
float var2 = list[0];

关于C++ 数组下标运算符模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54262073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com