C++模板检查类型并使用某些特定功能

abr*_*hab 1 c++ templates

是否有任何机制来检测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]
}
Run Code Online (Sandbox Code Playgroud)

0x4*_*2D2 5

您可以专门化您的功能模板.例如:

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);
}
Run Code Online (Sandbox Code Playgroud)