【发布时间】:2013-09-28 10:39:13
【问题描述】:
我不知道这是否可能,但也许还有其他解决方案可以满足我的需求。我正在尝试从设置文件中获取设置。它们可以是字符串(如名称)、整数或布尔值。当然,它们以文本形式存储在文件中,但我将创建一个用于打开和返回设置的类,但不是作为字符串,而是作为它们中的每一个实际上是什么。
class Settings {
public:
Settings(string FileName);
template <class T> T Setting(string SettingName);
}
例如,构造函数会加载文件、解析设置并将它们存储为地图。 现在,当我调用 Setting 成员函数时,我希望它识别所请求设置的值是什么类型(如果是数字,整数,如果是“真”或“假”布尔值,如果是字母数字字符串)并返回该类型的值。一个例子
Settings UserPreferences("Preferences.cfg");
bool AutoLogin = UserPreferences.Setting("autologin"); // return bool
string UserName = UserPreferences.Setting("username"); // return string or char*
我查看了模板,但看起来我必须在创建 Settings 对象时指定我期望的变量,但这不是重点。我很高兴像这样声明要返回的变量类型:
bool AutoLogin = UserPreferences.Setting<bool>("autologin");
string UserName = UserPreferences.Setting<string>("username");
但我不知道这是否可能。你怎么看?
【问题讨论】:
-
我有这样一个运行良好的类。所以是的,我认为这是可能的。 ;)
-
我很惊讶它的工作,因为你不能重载返回类型。
-
@BoBTFish:但它们不是重载。他们是专业。模板参数不能从返回类型推导出来,但是显式给出就可以了。
-
@BoBTFish 另一个类似的例子是
std::make_shared不带参数调用:每个调用与其他调用的不同之处仅在于其返回类型。 -
@BoBTFish:顺便说一句,实际上有一种情况可以重载返回类型。它会在这里允许一些很好的语法糖,尽管它可能会让初学者感到困惑。
标签: c++ templates variables types return