C++模板比 int->unsigned 转换更好?
C++ template better than a int->unsigned conversion?
我有两个函数,如下所示
template<typename T>
unsigned int myFunction(T myelement)
{
myelement->func();
return 2;
}
void myFunction(unsigned int myelement)
{
}
我正在使用以下代码
myFunction(2);
Visual Studio 2012抱怨"int没有->func()"。为什么它不使用无符号的 int 版本?
您误读了错误消息。编译器不使用该函数,而是实例化它以确定它是否是候选函数。您需要禁用不合适类型的实例化:
template<typename T>
typename std::enable_if<!std::is_fundamental<T>::value, unsigned int >::type
myFunction( T myelement )
{
// ...
}
现场示例
尝试编码
myFunction(2U);
或
myFunction((unsigned)2);
文字2
是int
(不是unsigned int
)类型。int
不是一个类或一个类型具有->func()
也许将模板专门用于unsigned
,而不是定义myFunction(unsigned int)
相关文章:
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 错误:隐式转换更改符号:'int'到'unsigned long'
- 如何使用多次 memcpy 转换回 std::vector<unsigned char>?
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- C++11 模板函数"implicity"将位集<N>转换为"unsigned long"
- 无法从'unsigned short [9]'转换为'char []'
- 错误:无法将'uint8* {aka unsigned int*}'转换为"常量emxArray_uint8_T*"?
- 错误:初始化时无法将'const unsigned char (*)[7]'转换为'const unsigned char (*)[]'
- C 如何在功能调用中从char *转换为unsigned char *
- 从'uint64_t'转换为'unsigned int'
- 从 int 转换为 std::array<unsigned char, 1ul>::value_type 可能会改变其值
- 将无符号 int *' 转换为 'unsigned int *&
- 错误:从 'short unsigned int*' 到"短无符号 int"的转换无效|(在 C++ 中)
- 初始化列表:无法在初始化中将Participant转换为unsigned int
- 隐式转换更改符号性 'int " to 'unsigned int"
- 将 vector<unsigned char> {1,2,3} 转换为字符串"1-2-3" AS DIGITS
- 错误:从'char*'转换为'unsigned int'会失去精度
- C++模板比 int->unsigned 转换更好?
- c++将unsigned转换为signed