C++ 根据参数大小在编译时选择函数

C++ 根据参数大小在编译时选择函数,c++,C++,是否有一种生成代码的方法(在编译时)看起来有点像: T Func(T t){ if (sizeof(t) == 2){ return X(t); } else if( sizeof(t) == 4){ return Y(t); } } (其中T为int32或int16) 因此,在运行时,我可以调用: Func(_myInt) 代码将编译为X(\u myInt)或Y(\u myInt)是 X Func(int32_t t) {

是否有一种生成代码的方法(在编译时)看起来有点像:

T Func(T t){
    if (sizeof(t) == 2){
        return X(t);
    }
    else if( sizeof(t) == 4){
        return Y(t);
    }
}
(其中T为int32或int16)

因此,在运行时,我可以调用:

Func(_myInt)
代码将编译为
X(\u myInt)
Y(\u myInt)

X Func(int32_t t) {
    return X(t);
}

Y Func(int16_t t) {
    return Y(t);
}
通过标签发送:

template <typename T>
auto Func_impl(T t, std::integral_constant<std::size_t, 2>){
   return X(t);
}

template <typename T>
auto Func_impl(T t, std::integral_constant<std::size_t, 4>){
   return Y(t);
}

template <typename T>
auto Func(T t){
   return Func_impl(T, std::integral_constant<std::size_t, sizeof(T)>{});
}
模板
自动函数impl(T,std::积分常数){
返回X(t);
}
模板
自动函数impl(T,std::积分常数){
返回Y(t);
}
模板
自动功能(T){
返回Func_impl(T,std::integral_常量{});
}

为了完整起见,如果您只想按绝对尺寸发货,还可以在以下情况下启用\u:

#include <utility>
#include <cstdint>

template <typename T, std::enable_if_t<sizeof(T) == 2>* = nullptr>
auto Func(T t){

}

template <typename T, std::enable_if_t<sizeof(T) == 4>* = nullptr>
auto Func(T t){

}

int main()
{
  Func(std::uint16_t(10));
  Func(std::uint32_t(10));
}
#包括
#包括
模板
自动功能(T){
}
模板
自动功能(T){
}
int main()
{
Func(std::uint16_t(10));
Func(std::uint32_t(10));
}

请阅读。@EdHeal,这里不需要模板。您甚至不需要在这里发送标记!简单的int32和int16重载就可以了!或者您可以始终在模板
auto wVar=Func(123)中添加X或Y但这增加了客户的责任caller@KerrekSB,这是作弊。引用OP:
其中T是int32或int16
在您的演示中,unsigned int来自哪里?