我有这样的代码
template <typename T> void fun (T value)
{
.....
value.print (); //Here if T is a class I want to call print (),
//otherwise use printf
.....
}
现在,为了打印值,如果T是一个类,我想调用对象的打印函数,但是如果T是一个基本数据类型,我只想使用printf。
那么,如何确定模板类型是基本数据类型还是类?
如果您没有C 11支持,另一种选择。
template<typename T>
class isClassT {
private:
typedef char One;
typedef struct { char a[2]; } Two;
template<typename C> static One test(int C::*);
template<typename C> static Two test(…);
public:
enum { Yes = sizeof(isClassT<T>::test<T>(0)) == 1 };
enum { No = !Yes };
};
用于确定类型是否为类类型的简单模板。更多关于C模板的完整指南。
if (isClassT<T>::Yes) {
std::cout << " Type is class " << std::endl;
}
推荐重载运算符
template <typename T> void fun (T value)
{
.....
std::cout << value << std::endl;
.....
}
FWIW,
std::is_class
存在。
您可以使用std::is_class
(也可能使用std::is_union
)。具体取决于你对“基本型”的定义。在此查看有关类型支持的更多信息。
但请注意,在C中,通常重载std::ostream
template <typename T> void fun (T value)
{
std::cout << value << "\n";
}
我正在研究一个矩阵类,它采用整数(short,int,long)和浮点类型(float,double)。我希望某些方法仅限于浮点类型(例如反转方法),而某些方法对于浮点类型和整数类型(例如==运算符)具有不同的实现。我有一种预感,正确的方法是使用boost的“enable_if”和“is_integral”/“is_floating_point”,但我似乎无法让它工作。 我的实现类似于此c半伪代码
问题简述如下: 这里假设T可以是int、float或类的类型。 如果我定义了一些变量并希望使用相同的函数显示它们的值: 我知道,在C中,有一种检查int和float的解决方案(仅针对打印问题),即使用std::cout,如本问题所述(C模板-如何找到模板类型是基本类型还是类)。 使用d::is_integral::值不适用于这样的情况: 因为这些变量是类而不是基本类型。对于这种情况,我们如何判断n
问题内容: Java中是否有类似“ typeof”的函数来返回原始数据类型(PDT)变量的类型或操作数PDT的表达式? 似乎仅适用于类类型。 问题答案: 请尝试以下操作: 它将打印: 至于,您可以使用其动态对应项:
我如何像这样?也许Boost支持它,如果不是C++或C++11中的新特性?
我一直听说确保最佳性能的最佳实践是: 按值传递基本类型(,..) 通过常量引用传递类 如今,在编译器下使用C 11和完全优化,当通过const引用传递基本类型时是否会产生开销? 此外,当<code>T<code>为<code>int<code>时,将执行以下功能: 慢于: