为什么此type_traits代码给我一个整数到指针的转换警告?

Venemo

无需赘述,我创建了一个可变参数模板函数,该函数根据其模板参数的类型执行不同的操作。我将实现简化为一个非常简单的控制台打印示例:

#include <cstdint>
#include <cstddef>
#include <cstdio>
#include <cstring>
#include <type_traits>

void print(const char *chars) {
    printf("%s", chars);
}

template<typename FirstType, typename ... OtherTypes>
inline void print(FirstType first, OtherTypes... others);

template<typename ... OtherTypes>
inline void print(const char *chars, OtherTypes... others) {
    print(chars);
    print(" ");

    if (sizeof...(others) == 0) {
        print("\r\n");
    }
    else {
        print(others...);
    }
}

template<typename FirstType, typename ... OtherTypes>
inline void print(FirstType first, OtherTypes... others) {
    char buffer[10];
    const char *format = nullptr;

    if (std::is_same<int, FirstType>::value) {
        format = "%d";
    }
    else if (std::is_same<char, FirstType>::value) {
        format = "%c";
    }
    else if (std::is_pointer<FirstType>::value && (std::is_same<char*, FirstType>::value || std::is_same<const char*, FirstType>::value)) {
        print((const char *) first, others...);
        return;
    }

    if (format != nullptr) {
        snprintf(buffer, 10, format, first);
    }

    print((const char *) buffer, others...);
}

int main() {
    print("this is an example:", 'X');

    return 0;
}

在上面的代码中,我使用aconst char*和a调用可变参数函数char它可以正常工作,但是麻烦的是编译器向我发出警告:

[Timur@Timur-Zenbook tm]$ g++ tm.cpp -Wall -Wextra -o tm
tm.cpp: In instantiation of ‘void print(FirstType, OtherTypes ...) [with FirstType = char; OtherTypes = {}]’:
tm.cpp:24:14:   required from ‘void print(const char*, OtherTypes ...) [with OtherTypes = {char}]’
tm.cpp:52:37:   required from here
tm.cpp:40:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
         print((const char *) first, others...);
               ^~~~~~~~~~~~~~~~~~~~

char参数发出警告,好像该函数错误地确定的类型char与相同const char*,因此const char*触发了其代码路径

为什么会收到此警告,该如何解决?
预先感谢您的回答!

无用

为什么我收到此警告

即使实际上不会执行该分支,该分支中的代码仍会is实例化FirstTypechar

我如何解决它?

将仅对某些类型有意义的代码移到重载或特殊特征中,这样就不会针对不匹配的类型首先编译该代码。

最简单的更改是else if(std::is_pointer...完全删除分支,并添加此重载,其效果相同:

template<typename ... OtherTypes>
inline void print(char *chars, OtherTypes... others) {
    print((const char *)chars, others...);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么此代码序列给我一个错误102

来自分类Dev

为什么我的代码给我一个值而不是一个列表

来自分类Dev

为什么此sort命令给我一个空文件?

来自分类Dev

不明白为什么我的代码给我一个IndexError

来自分类Dev

为什么我的代码在运行时给我一个stackdump错误?

来自分类Dev

为什么VisualStudio / Firefox从排除类中的代码中给我一个YSOD?

来自分类Dev

为什么这个html代码给我一个错误?

来自分类Dev

为什么以下sass代码给我一个错误?

来自分类Dev

为什么我的SKAudioNode给我一个错误?

来自分类Dev

为什么 eval 类给我一个从 int 到 double 的转换错误?

来自分类Dev

为什么一个代码从Firebase给我正确的密钥,而另一个却没有?

来自分类Dev

将唯一指针插入无序映射时,为什么C ++给我一个错误?

来自分类Dev

为什么这if语句给我一个错误

来自分类Dev

为什么triggerHandler(event)给我一个错误?

来自分类Dev

为什么mktime少给我一个小时?

来自分类Dev

为什么这会给我一个IndexError?

来自分类Dev

为什么这个 if 语句给我一个 ValueError?

来自分类Dev

无法获得此代码以列出目录中的所有文件,或者给我一个错误。它什么也没做

来自分类Dev

为什么我在python上的R ^ 2值给我一个负整数作为输出?

来自分类Dev

为什么此HttpClient用法给我一个“无法访问已处置的对象”的信息。错误?

来自分类Dev

为什么使用JSONObject解析此JSON字符串会给我一个错误?

来自分类Dev

你能弄清楚为什么我的代码给我一个 IndexOutOfBounds 错误吗?

来自分类Dev

谁能解释为什么我的date函数通过JS date对象给我一个错误的转换?

来自分类Dev

为什么在这种情况下不给我一个不可为空的整数

来自分类Dev

为什么此代码为我的电话号码添加一个额外的零?

来自分类Dev

为什么此Python代码给我错误的答案?

来自分类Dev

为什么setcookie()函数会给我警告。(包括代码)

来自分类Dev

使用此代码给我一个内部错误。怎么修?

来自分类Dev

为什么“ a-> content”给我一个地址而不是一个值?

Related 相关文章

  1. 1

    为什么此代码序列给我一个错误102

  2. 2

    为什么我的代码给我一个值而不是一个列表

  3. 3

    为什么此sort命令给我一个空文件?

  4. 4

    不明白为什么我的代码给我一个IndexError

  5. 5

    为什么我的代码在运行时给我一个stackdump错误?

  6. 6

    为什么VisualStudio / Firefox从排除类中的代码中给我一个YSOD?

  7. 7

    为什么这个html代码给我一个错误?

  8. 8

    为什么以下sass代码给我一个错误?

  9. 9

    为什么我的SKAudioNode给我一个错误?

  10. 10

    为什么 eval 类给我一个从 int 到 double 的转换错误?

  11. 11

    为什么一个代码从Firebase给我正确的密钥,而另一个却没有?

  12. 12

    将唯一指针插入无序映射时,为什么C ++给我一个错误?

  13. 13

    为什么这if语句给我一个错误

  14. 14

    为什么triggerHandler(event)给我一个错误?

  15. 15

    为什么mktime少给我一个小时?

  16. 16

    为什么这会给我一个IndexError?

  17. 17

    为什么这个 if 语句给我一个 ValueError?

  18. 18

    无法获得此代码以列出目录中的所有文件,或者给我一个错误。它什么也没做

  19. 19

    为什么我在python上的R ^ 2值给我一个负整数作为输出?

  20. 20

    为什么此HttpClient用法给我一个“无法访问已处置的对象”的信息。错误?

  21. 21

    为什么使用JSONObject解析此JSON字符串会给我一个错误?

  22. 22

    你能弄清楚为什么我的代码给我一个 IndexOutOfBounds 错误吗?

  23. 23

    谁能解释为什么我的date函数通过JS date对象给我一个错误的转换?

  24. 24

    为什么在这种情况下不给我一个不可为空的整数

  25. 25

    为什么此代码为我的电话号码添加一个额外的零?

  26. 26

    为什么此Python代码给我错误的答案?

  27. 27

    为什么setcookie()函数会给我警告。(包括代码)

  28. 28

    使用此代码给我一个内部错误。怎么修?

  29. 29

    为什么“ a-> content”给我一个地址而不是一个值?

热门标签

归档