【问题标题】:Comparisons of template type passed in, to basetypes or objects传入的模板类型与基类型或对象的比较
【发布时间】:2014-11-10 01:39:18
【问题描述】:

是否可以比较传递给函数的模板类型

/* Stuff prior to the function being called */
template <class BaseType>
void foo(BaseType bar){
    if(BaseType == 'Class made Object || some primitive Datatype')
    // This in hopes to make just one function that accepts, as a template, any argument
}

== 运算符不起作用,从某种意义上说,这是在 C++ 中。 /************************************************* **
从评论中添加以扩展给定问题。
****************************************************** */
我对模板 atm 的概念非常陌生,我了解它们的整体工作方式并了解它们是如何传递的,但希望能够从使用模板参数调用的函数中分辨出传递给它的内容,因为问题说,目前正在尝试获取 BaseType 是创建的对象还是原始数据类型之一。它很复杂,但我想看看是否有可能在模板中通过传入不同的参数在同一个函数上做不同的点。也可以将此评论添加到主要问题中,希望这不违反 SO 规定。

【问题讨论】:

  • 我认为您需要模板专业化,但我对此感到生疏。
  • C++11 提供了一长串用于处理类型的函数。看看en.cppreference.com/w/cpp/types
  • 我对模板 atm 的概念还很陌生,我了解它们的整体工作方式并了解它们是如何传递的,但希望能够从使用模板参数调用的函数中分辨出来正如问题所说,传递给它的内容当前试图获取 BaseType 是创建的对象还是原始数据类型之一。它很复杂,但我想看看是否有可能在模板中通过传入不同的参数在同一个函数上做不同的点。也可以将此评论添加到主要问题中,希望这不违反 SO regs。
  • 在你的点 RSahu 下,我是否应该尝试查看传递给函数 is_object 的点,而不是尝试描述传递给给定函数的 BaseType,然后在本身,如果是这种情况,它将对当前的应用程序有所帮​​助,但是有没有办法实际获取传入的 BAseType,C++ 必须以某种方式存储它才能使用它吗?例如调用函数并在传递给它的 中声明。

标签: c++ templates object


【解决方案1】:

你可以使用:

template <class BaseType>
void foo(BaseType bar){
    if ( std::is_class<BaseType>::value || std::is_fundamental<BaseType>::value )
    {
    }
}

但是,根据您要解决的问题,模板专业化可能也可以工作,甚至更好。

【讨论】:

  • 我刚刚被介绍到模板功能,在我目前正在阅读的嘘声中,还没有进入专业化领域。我向前跳了一点,因为它似乎应该是可行的,因为调用需要将类型传递给它的函数,如 foo(...) 等。
  • C++ 中的模板主题很有趣。你可以保持简单直接。根据您使用它们的方式,它也可能很复杂和令人困惑。希望您旅途愉快。
  • 谢谢你,没想到按照你最初概述的方式来处理它,但你知道的越多越好。目前正在尝试继续执行 Practical C++ 2nd edt。通过 Oreilly 自学一点,并保持领先于我目前所在的班级。这个网站本身就非常有用。再次感谢链接和后续示例。
猜你喜欢
  • 2012-05-11
  • 2017-01-10
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多