条件typedef

Cla*_*bel 6 c++ templates

如果我有一点点代码......

template <typename _T>
class Foo
{
public:
    typedef const T& ParamType;
    void DoStuff(ParamType thingy);
};
Run Code Online (Sandbox Code Playgroud)

如果这可能是非最佳的sizeof(_T) <= sizeof(_T*).

因此,我希望有条件typedef.如果大小_T小于或等于指针的大小,则只需将其传递给值.否则,通过const引用传递它.这可能吗?我听到所有这些关于模板完成图案的东西,但这让我感到很伤心.

vla*_*adr 5

使用部分模板专业化很容易实现.

template< typename _T, bool _ByVal >
struct FooBase {
  typedef const _T& ParamType;
};

template< typename _T >
struct FooBase< _T, true > {
  typedef const _T ParamType;
};

template< typename _T, bool _ByVal = sizeof(_T) <= sizeof(void*) >
class Foo : public FooBase< _T, _ByVal > {
  typedef typename FooBase< _T, _ByVal >::ParamType ParamType;
  void DoStuff(ParamType thingy);
};
Run Code Online (Sandbox Code Playgroud)

编辑根据杰夫的解决方案,人们确实应该进行比较sizeof(_T),sizeof(_T&)但我保留了原始<= void*要求.