你可以静态断言该对象可以转换为某种类型吗?

Iva*_*van 4 c++ templates c++11

我目前正在为C++ 11开发一个控制台GUI库,只是为了简化一些调试和操作.

对于某个类的模板,我想确保在打印它之前可以将模板化类型转换为字符串.

例:

template<typename T>
class listbox {
private:
    std::vector<T> list;
    [...]

public:
    std::string print_item(T& item) { /* static_assert() here */}
}
Run Code Online (Sandbox Code Playgroud)

因此,在"静态断言"部分中,我想检查是否可以将项目转换为std::string(或者const char*也可以正常工作),所以问题很简单,如何从模板化类型断言转换?

我知道编译器/ ide会对不能识别它的类型做出反应,但我需要一个固定类型才能对字符串进行更多控制.

Sto*_*ica 6

是的你可以!只是用std::is_convertible

template<typename T>
class listbox {
private:
    std::vector<T> list;
    [...]

public:
    std::string print_item(T& item) {
      static_assert(std::is_convertible<T, const char*>::value, "Not stingifyable");
      // More work
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 并添加失败消息. (2认同)
  • @StoryTeller虽然不需要变量模板,这是C++ 14的功能吗? (2认同)