问题描述
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 (将#修改为@)