c++模板检查类型并使用一些特定的函数
C++ templates check the type and use some specific function
是否有机制检测函数中T
的类型,并选择正确的方法执行?
我知道我可以写几个函数,如ClassContainerAdv<INT OR FLOAT>::
,但我不喜欢这种方式,因为原来的函数是100行代码,我只需要在一行选择正确的方法。因此,如果我将有两个ClassContainerAdv<INT OR FLOAT>::
函数—这意味着2x
在源文件上使用相同的代码(复制&粘贴)。
的例子:
template <class T>
void ClassContainerAdv<T>::add_data_to_sqlite( const sqlite3* db )
{
[skip]
if ( T == "INT" )
sqlite3_bind_int64(stmt, 1, (it->first) );
else if ( T == "FLOAT" )
sqlite3_bind_double(stmt, 1, (it->first) );
[skip]
}
你可以特殊化你的函数模板。例如:
template<typename T>
void ClassContainerAdv<T>::add_data_to_sqlite( const sqlite3* db );
template<>
void ClassContainerAdv<int>::add_data_to_sqlite( const sqlite3* db )
{
sqlite3_bind_int64(stmt, 1, it->first);
}
template<>
void ClassContainerAdv<float>::add_data_to_sqlite( const sqlite3* db )
{
sqlite3_bind_double(stmt, 1, it->first);
}
我将为偏离的部分使用旧的重载集:
// Some overloads
void bind(int i);
void bind(double d);
// etc...
template <class T>
void ClassContainerAdv<T>::add_data_to_sqlite( const sqlite3* db )
{
[skip]
bind(x); // x is double, or int or ...
[skip]
}
将此放入您的代码(从类型相等测试w/decltype(), auto,或RTTI在c++中?Boost有这个功能吗?):
template <typename T, typename U>
struct same_type
{
static const bool value = false;
};
template <typename T>
struct same_type<T, T>
{
static const bool value = true;
};
然后你可以像这样检查类型:
template <class T>
void ClassContainerAdv<T>::add_data_to_sqlite(const sqlite3* db)
{
if (same_type<decltype(T), int>().value)
sqlite3_bind_int64(stmt, 1, it->first);
else if (same_type<decltype(T), float>().value)
sqlite3_bind_double(stmt, 1, it->first);
// else if ... etc.
}
相关文章:
- C++模板来检查友元函数的存在
- 检查函数返回类型是否与STL容器类型值相同
- 文本 RPG - 使用函数检查有效的输入
- 如何使用斐波那契和递归函数检查矩形是否是黄金矩形?
- 使用函数检查数字是素数、偶数还是奇数
- 给定一个创建的带有货物的链表,我需要使用函数检查实际序列或"train"是否有效
- 编写一个函数,用递归函数检查数字是否是正方形
- 如何使O(n)的函数检查字母(上和下)和()+-*/到尾递归?
- 寻找一种更有效的方法来使用 STL 函数检查字符串是否为回文
- 在矩阵C 中使用Bool函数检查重复数字
- 通过函数检查数组的大小
- 如何使用 testBit 函数检查二进制数组中的特定索引位
- 布尔函数检查特定的字符串要求
- 函数检查整数类型是否适合可能不同(整数)类型的值
- 函数检查出边界/分割故障在二维循环
- QMap函数:检查是否包含isbn号
- 函数检查字符串是否为int型
- 为什么CString(LPCTSTR lpsz)构造函数检查lpsz的高两个字节
- 字符类型的函数检查值
- 成员函数检查:用c++ 11特性实现编译时检查