如何解决调用存储在std :: any中的对象的成员函数
假设我有一个模板化的类,就像这样:
template<class T,class V>
class MyClass
{
public:
MyClass(std::string const& name){
s = name;
}
T return_var1() {
return var1;
}
std::string s;
T var1;
V var2;
};
我将按如下所示使用它:
class AnotherClass {
public:
void some_func() {
MyClass<int,double> my_var("test");
std::pair<std::string,std::any> tmp_pair("test",my_var);
my_vars.insert(tmp_pair);
}
void some_other_func() {
auto tmp = my_vars["test"];
// Any way to call member function without using std::any_cast<...> ?
// For example,not like this:
// (std::any_cast<MyClass<int,double>>tmp).return_var1()
// But like this:
std::cout << tmp.return_var1();
}
private:
std::unordered_map<std::string,std::any> my_vars;
}
是否可以在不知道或不使用所包含对象的类型的情况下调用存储在std :: any中的对象的成员函数? (不使用上面评论中写的std :: any_cast ())
任何解决方案都是可以接受的,例如使用std::variant
等从具有CRTP的基类继承MyClass。
我需要这个的原因是因为我想这样使用模板化函数:
some_templated_function<decltype(my_var.var1)>();
// Or similarly,some_templated_function<decltype(my_var.return_var1())>();
目的是允许用户仅注册一次<int,double>
类型,并在需要的地方广泛使用类型名称。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。