c++ - 如何在函数模板中获得不同类型

标签 c++ templates

我定义了下面的函数模板,但是我遇到了一些问题。请帮帮我。谢谢!

template <typename T>
void Insert(CMyObj obj_, std::vector<T>& vec_)
{
    if(T is bool type)
        vec_.push_back(obj_.AsBool());
    if(T is string type)
        vec_.push_back(obj_.AsString());
}

我可以如下调用函数模板,我应该如何实现我的 Insert()。

CMyObj  obj;
std::vector<bool> vec1;
Insert<bool>(obj, vec1);

std::vector<string> vec2;
Insert<string>(obj, vec2);

最佳答案

首先,如果模板参数可以从参数中推导出来(在本例中可以),您可以简单地通过“Insert(obj, vec1)”调用它:如果 vec1 是 std::vector<code><bool</code>> , T 将是 bool 等...

其次,我将定义第二个函数模板,专门用于从类似变体的 CMyObj 中提取类型化值:

template <typename T>
T GetValue(const CMyObj& obj); // Note: no definition

// These should be inline or in a .cpp file to prevent linker issues
template <>
inline bool GetValue(const CMyObj& obj) { return CMyObj.AsBool(); }

template <>
inline std::string GetValue(const CMyObj& obj) { return CMyObj.AsString(); }

然后您可以将 Insert 实现为:

template <typename T>
void Insert(CMyObj obj_, std::vector<T>& vec_)
{
  vec_.push_back(GetValue<T>(obj_));
}

如果您尝试将其插入到具有 GetValue 尚未特化的值类型的 vector 中,它将无法编译。我猜这就是您想要的。

关于c++ - 如何在函数模板中获得不同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22552080/

相关文章:

wordpress - 如何将 WooCommerce 电子邮件模板设置为所有电子邮件的默认模板

javascript - 如何将html表单模板编译为html字符串

带有 std::is_base_of 的派生类的 C++ 模板函数

c++ - C++ : chars won't loop back to 'a' or 'A' 中的凯撒密码编码

php 使用 system()/shell_exec()/exec() 运行终端应用程序,但只显示一半的输出

c++ - 将 Qscintilla 库添加到 Qt Problems

php - 将 php 数组转发到 twig 模板 (Symfony)

c++ - 如何为STL容器指定模板函数?

C++/Mysql 连接器 : undefined reference to `get_driver_instance'

c++ - OpenCV的Bayer转换使用什么算法?