如何创建C模板以最佳方式传递值?

前端之家收集整理的这篇文章主要介绍了如何创建C模板以最佳方式传递值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我似乎记得我使用类型的大小来选择参数的值传递或引用传递.

就像是:

void fun( check<A> a ){
    ...
}

生成或:

void fun( A a ){
    ...
}

要么

void fun( A & a ){
    ...
}

取决于类型A的大小和编译应用程序的体系结构.

解决方法

在C 11中,您可以使用 std::conditional
#include <type_traits>

class A { ... };

typedef std::conditional<
   std::is_trivially_copyable<A>::value && sizeof(A) <= sizeof(int),A,const A&>::type AParam;

// Direct usage
void f(AParam param);

// Wrap into template class
template <typename T> struct check:
   std::conditional<std::is_arithmetic<T>::value,T,const T&> {};

void f(check<A>::type param);

对于C 03编译器,您可以使用Boost实现 – Boost.TypeTraits library.

正如@sehe所提到的,还有Boost.CallTraits library正确实现了所需的功能

#include <boost/call_traits.hpp>

class A { ... };

void f(boost::call_traits<A>::param_type param);
原文链接:https://www.f2er.com/c/117447.html

猜你在找的C&C++相关文章