【C++】在使用PImpl技术时,template/typename的不常见用法

打印 上一主题 下一主题

主题 765|帖子 765|积分 2295

PImpl:Pointer to implementation,常用于隐藏实现细节,构造拥有稳定 ABI 的 C++ 库接口,及减少编译时依赖。
在使用pimpl技术时,pimpl是类静态变量,对其在源文件中的实现需要使用typename关键字

对于模板类的静态成员变量的定义,你需要使用完整的模板类型限定符来指定 std::unique_ptr 的类型。在这个示例中,我们使用 typename MyClass::Impl 来指定 std::unique_ptr 的类型。
[code]// MyClass.h#include templateclass MyClass {public:    void doSomething();private:    class Impl;    static std::unique_ptr p_impl;  // 静态 p_impl 变量的声明};// MyClass.cpptemplateclass MyClass::Impl {public:    void doSomething() {        // 实现具体逻辑        std::cout template doSomething<U>();处,使用template关键字告诉编译器我们正在引用一个模板成员函数doSomething<U>()。不使用template关键字会报错</p>[code]// MyClass.h#include templateclass MyClass {public:    MyClass();    template    void doSomething();private:    class Impl;    std::unique_ptr p_impl;};// MyClass.cpptemplateclass MyClass::Impl {public:    template    void doSomething() {        // 实现具体逻辑        std::cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表