如果我有一点点代码......
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引用传递它.这可能吗?我听到所有这些关于模板完成图案的东西,但这让我感到很伤心.
使用部分模板专业化很容易实现.
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*要求.