【发布时间】:2014-11-29 04:48:05
【问题描述】:
是否可以为重载的operator[] 显式指定返回类型?
例如,我有一个带有重载运算符[] 的对象实例,如果我使用instance["num"],我希望它返回一个int 和instance["flt"] 一个float(已经有类型处理逻辑),像这样:
int some_value = instance["amount_of_entries"];
float other_value = instance["percentage"];
我试过了:
class someClass {
template<class T> T& operator[](char* index){ ... }
};
int val = instance["int_value"];
但我得到一个错误:
error C2783: 'T &CSettings::operator [](char*)' : could not deduce template argument for 'T'
我曾想过使用instance<int>["int_value"],但这是语法错误,无法编译。
【问题讨论】:
-
没有。为什么不使用成员函数:
int amountOfEntries()和float percentage()?这就是 c++ 的做法。 -
@quantdev:因为
get前缀在 C++ 中冗长且适得其反?开始,正如我常说的那样。 -
@Cheersandhth.-Alf 这是你的意见(我已重命名),无论如何命名你想要的函数。
-
@quantdev 因为我正在尝试创建一个用户可修改的设置类。 Aka 我有一个类,它有一定数量的设置(例如
maxAmountOfX:int、modeOfSomething:char*等),然后由我的程序逻辑使用,但我也希望它们能够被用户修改instance[user_input[0]] = parse_user_input(user_input[1]);而不是像if(user_input[0] == "maxAmountOfX"){ this->maxAmountOfX = user_input[1]; } ...那样巨大的 -
您可以尝试一个通用命名的方法,例如
setting并将其称为int value = instance.setting<int>("int_value");。不是您想要但可以工作的运算符语法。
标签: c++ templates visual-c++ operator-overloading