派生模板类指针转换中的编译器提示

compiler hint in derived template class pointer conversion

提问人: 提问时间:8/12/2023 更新时间:8/12/2023 访问量:41

问:

如何定义在尝试编译以下代码时将显示的编译器错误消息?

template<int n> struct Base{};

struct Derived: Base<2>{};

int main(){
    Derived x;
    Base<1>* p;
    p=&x; // a compiler hint like "Derived has dimension 2, not 1" would be nice.
}

正如预期的那样,上面的代码生成了编译错误,我希望实现的是用类似 .cannot convert 'Derived*' to 'Base<1>*' in assignmentbecause Derived has dimension 2, not 1

我的申请背景: 我有具有模板维度的模板虚拟问题类,以及一个具有内存的模板求解器类,具体取决于模板参数的维度,这是一个派生的问题类。当传递一个不兼容维度的派生问题时,我想通过提示维度来帮助用户识别编译错误。我不想用一个额外的维度模板参数来扩充求解器。

C++ 指针 模板 继承

评论

0赞 Alan Birtles 8/12/2023
您应该已经收到该错误消息了吗?
0赞 azhen7 8/12/2023
我的编译器给了我错误,所以你想要的几乎已经发生了cannot convert 'Derived*' to 'Base<1>*' in assignment
1赞 Pepijn Kramer 8/12/2023
将静态多态性(模板)与动态多态性混合在一起通常是一种设计气味。(我唯一可能期望的是 Base 是某种抽象基类)。所以你试图解决一些事情并想出这个,但你想解决的是什么?
0赞 HolyBlackCat 8/12/2023
我尝试过 GCC、Clang 和 MSVC,它们都以默认设置拒绝此代码。
2赞 n. m. could be an AI 8/12/2023
不能为内置类型(指针是内置类型)定义自定义错误消息。您可以定义自己的智能(或不那么智能)指针类,并且可以使用 定义自己的错误消息。static_assert

答: 暂无答案