首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ 11模板子类型

C++ 11模板子类型
EN

Stack Overflow用户
提问于 2017-05-02 22:11:15
回答 2查看 273关注 0票数 1

添加更多细节

我希望注入一个类型并使用它作为模板类型,除此之外,我还想隐式地传递一个要使用的子类型。

执行情况:

代码语言:javascript
运行
复制
MyClass<MyTestClass> myClass;

const auto& testDataReturn = myClass.m_typeObject.m_field1;

// looking to be able to call myClass.m_subTypeObject here which is implicitly typed from the parent type (see template def below)

模板:

代码语言:javascript
运行
复制
template<class T>
class MyClass
{
public:

    T m_typeObject;
    typename T::SubType m_subTypeObject; // **does not like this**
};

typedef MyType SubType;

类别定义:

代码语言:javascript
运行
复制
class SubTypeImpl
{
public:
    std::string m_field1 = "test1Sub";
    std::string m_field2 = "test2Sub";
};

class MyTestClass
{

public:
    std::string m_field1 = "test1";
    SubTypeImpl SubType;
};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-02 23:19:14

我可能不完全理解这个问题,但看来如果你改变了

代码语言:javascript
运行
复制
SubTypeImpl SubType;

代码语言:javascript
运行
复制
typedef SubTypeImpl SubType;

你可以实现你想要的。

票数 1
EN

Stack Overflow用户

发布于 2017-05-02 23:09:53

T::SubType不是一个类型,它是一个成员字段。

代码语言:javascript
运行
复制
template<class T>
using SubType = decltype(std::declval<T&>().SubType);

它获取SubType成员的T类型,假设它是公共的。

代码语言:javascript
运行
复制
template<class T>
class MyClass {
public:

  T m_typeObject;
  SubType<T> m_subTypeObject;
};

您可以在decltype定义中执行MyClass内联操作,但这很麻烦。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43748046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档