根据模板变量类型执行不同的方法
Perform different methods based on template variable type
有没有办法确定传递给模板的变量的类型,并根据它是int
还是std::string
等调用函数?
例如
template <class T>
struct Jam
{
Jam(T *var)
{
if (typeid(var) == typeid(std::string*)
*var = "Hello!";
else if (typeid(var) == typeid(int*)
*var = 25;
}
};
当我尝试使用该代码时,我收到错误invalid conversion from const char* to int
。我怀疑这是因为编译器将模板"扩展"为单独的函数,当我指定结构的新实例时throw Jam<std::string>(&setme);
它检测到var* = 25
语句并拒绝编译。
有没有正确的方法可以做到这一点?也许有宏观防护?谢谢。
改用常规函数重载:
template <class T>
struct Jam
{
Jam(std::string* var)
{
*var = "Hello!";
}
Jam(int* var)
{
*var = 25;
}
};
除非您想专注于用于实例化Jam
的类型T
。在这种情况下,您将执行以下操作:
template<>
struct Jam<std::string>
{
Jam(std::string* var)
{
*var = "Hello!";
}
};
template<>
struct Jam<int>
{
Jam(int* var)
{
*var = 25;
}
};
template<typename T>
struct Jam
{
Jam(T* var)
{
// every other type
}
};
查找"部分模板专用化"。
把 Jam() 的身体从 Jam{} 中取出:
template <class T>
struct Jam
{
Jam(T *var);
};
现在写两个正文:
Jam<int>::Jam(int *var) {
// stuff
}
Jam<std::string>::Jam(std::string *var) {
// stuff
}
(警告:生锈的C++。但通常这就是你的做法。
新问题:如果你需要鸭子打字,你为什么要使用C++?我会切换到 Ruby,并为需要速度的插件保存C++。但C++仍然会支持优雅的设计,还有更多的工作!
相关文章:
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 如何使父类不重复已经执行的祖父方法
- 如何将带有参数的方法传递给线程以执行?
- 在C++中执行 N 阶乘编译时间的 3 种不同/相同方法
- 在 c++ 中从执行的 shell 命令获取返回状态的安全方法是什么?
- 在高通六边形处理器的word32上执行水平求和的最快方法是什么
- 在C++中执行方法的同一行中传递指针
- 在 MySQL 连接器C++ API 中使用一个函数调用执行多个查询的正确方法是什么?
- 如何执行重写的方法C++
- 基于整数向量执行位排列的有效方法?
- 执行模板参数包指向的所有方法
- cppUnit:针对多个测试方法执行一次的设置函数
- 检查子类是否执行了方法重写
- 通过调试来检查C 中单行表达式执行顺序的方法
- 如何在不冻结线程/应用程序的情况下减慢方法执行速度
- 如何在 COM 中对方法执行返回类型
- 在对类方法执行指针部分专用化时获取"illegal use of explicit template arguments"
- 继承,选择性方法执行