MonoKelvin 2021-10-09 15:07 采纳率: 50%
浏览 18
已结题

C++中怎么将模板函数的具体模板类型转成字符串


class IService
{
public:
    // ...
};

class MyClass
{
public:
};

#define ASSERT_SERVICE(_ServiceName_) \
static_assert(std::is_base_of<IService, _ServiceName_>::value, #_ServiceName_"不是继承自IService")

class ApplicationContext
{
public:
    // ...

    template<class ServiceType>
    static void registerService()
    {
        ASSERT_SERVICE(ServiceType);

        // ...
    }

    // ...
};

我在registerService中使用了ASSERT_SERVICE,调用时:

ApplicationContext::registerService<MyClass>();

希望能将具体的类型转成字符串,就是这一句:#ServiceName"不是继承自IService" 可以转成 “MyClass不是继承自IService”,但是断言结果是:

error C2338: ServiceType

VS2019对宏的展开:

img

并没有将MyClass转成字符串,而是把声明的模板类型转成了字符串,我要怎么做才可以将具体的类型转字符串?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 10月17日
    • 修改了问题 10月9日
    • 创建了问题 10月9日

    悬赏问题

    • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
    • ¥15 这种微信登录授权 谁可以做啊
    • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
    • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
    • ¥15 网络设备配置与管理这个该怎么弄
    • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
    • ¥20 西门子S7-Graph,S7-300,梯形图
    • ¥50 用易语言http 访问不了网页
    • ¥50 safari浏览器fetch提交数据后数据丢失问题
    • ¥15 matlab不知道怎么改,求解答!!