Visual C:模板类中的自定义错误消息

zdf

下面的代码失败(按预期方式)。令我困扰的是错误消息。它没有明确说明问题所在。我本来希望这样的“cannot convert from const char* to int”相反,它说"cannot convert from 'initializer list' to 'B<int>'",当涉及其他复杂类型时,它变得不太清楚。

如何添加自定义错误消息实际的课程要复杂得多。

#include <vector>

template< typename T >
class B
{
  std::vector<T> v;
public:
  B( std::initializer_list<T> il ) : v{ il } {}
};

int main()
{
  B<int> b{ "a","b","c" }; // fails with cannot convert from 'initializer list' to 'B<int>'
}
内森·奥利弗

如果只想拥有一个std::initializer_list<T>构造函数,那么您可以做的一件事就是提供一个可变的模板构造函数,然后在static_assert内部构造函数中提供所需的错误消息。之所以可行,是因为如果您提供其他任何东西,那么std::initializer_list<T>构造函数将更好地匹配,并且断言将触发。看起来像

#include <vector>

template< typename T >
class B
{
    std::vector<T> v;
public:
    B( std::initializer_list<T> il ) : v{ il } {}
    template <typename... Args>
    // the sizeof...(Args) < 0 is needed so the assert will only fire if the constructor is called
    B(Args...) { static_assert(sizeof...(Args) < 0, "This class can only be constructed from a std::initializer_list<T>"); }
};

int main()
{
    //B<int> b1{ "a","b","c" }; // uncomment this line to get static_assert to fire
    B<int> b2{ 1,2,3 };
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

visual c ++自定义类的排序列表

来自分类Dev

自定义Visual Studio错误

来自分类Dev

自定义Visual Studio错误

来自分类Dev

带自定义向导的Visual Studio项目模板

来自分类Dev

Visual Studio 2013中的自定义脚手架模板

来自分类Dev

在 Visual Studio for C# 中使用自定义类列表作为持久设置

来自分类Dev

Visual C#在Appdata中的自定义XML中存储和读取自定义选项

来自分类Dev

Visual C#在Appdata中的自定义XML中存储和读取自定义选项

来自分类Dev

在 Visual Studio 中打开的自定义项中的引用

来自分类Dev

为什么 Visual Studio Build 不输出具有自定义名称的 Target 元素中的消息?

来自分类Dev

如何将自定义项目模板和向导集成到Visual Studio包中?

来自分类Dev

如何将自定义项目模板和向导集成到Visual Studio包中?

来自分类Dev

如何在Visual Studio 2015中注册.NET Core 1.1 RTM的自定义项目模板?

来自分类Dev

自定义Visual Studio Code中的语法突出显示

来自分类Dev

在winapi中复制Visual Studio 2013自定义GUI

来自分类Dev

Visual Studio 2013中的自定义js httphandler

来自分类Dev

Visual Studio 中的累积自定义构建步骤

来自分类Dev

类声明-自定义错误消息

来自分类Dev

通过Visual Studio C#在Crystal Report中编写自定义查询

来自分类Dev

在 Visual C++ 中添加自定义预处理任务

来自分类Dev

Visual Studio 2012中的模板类实例化错误

来自分类Dev

在C ++类中构造自定义模板

来自分类Dev

在 Visual Basic .NET 中,如何列出和调用具有给定自定义属性的所有类函数?

来自分类Dev

Visual Studio:自定义语法着色

来自分类Dev

Visual Studio 2012项目模板自定义参数和重命名问题

来自分类Dev

Visual Studio 2015 ASP.NET Core RC2:自定义项模板的丢失

来自分类Dev

将自定义项模板添加到 Visual Studio 解决方案

来自分类Dev

Python中的自定义错误消息

来自分类Dev

自定义MVC中的错误消息

Related 相关文章

  1. 1

    visual c ++自定义类的排序列表

  2. 2

    自定义Visual Studio错误

  3. 3

    自定义Visual Studio错误

  4. 4

    带自定义向导的Visual Studio项目模板

  5. 5

    Visual Studio 2013中的自定义脚手架模板

  6. 6

    在 Visual Studio for C# 中使用自定义类列表作为持久设置

  7. 7

    Visual C#在Appdata中的自定义XML中存储和读取自定义选项

  8. 8

    Visual C#在Appdata中的自定义XML中存储和读取自定义选项

  9. 9

    在 Visual Studio 中打开的自定义项中的引用

  10. 10

    为什么 Visual Studio Build 不输出具有自定义名称的 Target 元素中的消息?

  11. 11

    如何将自定义项目模板和向导集成到Visual Studio包中?

  12. 12

    如何将自定义项目模板和向导集成到Visual Studio包中?

  13. 13

    如何在Visual Studio 2015中注册.NET Core 1.1 RTM的自定义项目模板?

  14. 14

    自定义Visual Studio Code中的语法突出显示

  15. 15

    在winapi中复制Visual Studio 2013自定义GUI

  16. 16

    Visual Studio 2013中的自定义js httphandler

  17. 17

    Visual Studio 中的累积自定义构建步骤

  18. 18

    类声明-自定义错误消息

  19. 19

    通过Visual Studio C#在Crystal Report中编写自定义查询

  20. 20

    在 Visual C++ 中添加自定义预处理任务

  21. 21

    Visual Studio 2012中的模板类实例化错误

  22. 22

    在C ++类中构造自定义模板

  23. 23

    在 Visual Basic .NET 中,如何列出和调用具有给定自定义属性的所有类函数?

  24. 24

    Visual Studio:自定义语法着色

  25. 25

    Visual Studio 2012项目模板自定义参数和重命名问题

  26. 26

    Visual Studio 2015 ASP.NET Core RC2:自定义项模板的丢失

  27. 27

    将自定义项模板添加到 Visual Studio 解决方案

  28. 28

    Python中的自定义错误消息

  29. 29

    自定义MVC中的错误消息

热门标签

归档