标签:c types inheritance parent decltype
给定以下类别:
template <typename T>
class Child : public T {};
我还有一个模板函数:
template <typename T>
void foo(const T& bar)
在进行了一些模板体操之后,我有一段代码确定了bar是某种Child.但是我需要找到什么样的东西.
我希望能够对产生继承类型的bar进行调用.因此,查找父类型的虚假语法为:
decltype(foo.parent) bar;
有什么实际的语法可以做到这一点?
解决方法:
根据OP的要求,以下是我上面评论的扩展版本:
如果Child及其兄弟姐妹在您的控制之下,处理此问题的一种常见方法是向它们添加嵌套类型:
template<typename T> class Child : public T
{
public:
using parent = T;
};
template<typename T> void foo(const T& bar)
{
typename T::parent goo;
}
如果T不直接可用(例如,在lambda中),那么这应该起作用:
auto foo2 = [](const auto& bar)
{
typename std::remove_reference_t<decltype(bar)>::parent goo;
};
为了使它更好一点和更短一点,
template<typename T> using parent = typename T::parent;
template<typename T> void foo(const T& bar)
{
parent<T> goo;
}
auto foo2 = [](const auto& bar)
{
parent<std::remove_reference_t<decltype(bar)>> goo;
};
(尽管parent是一个相对通用的名称;当心冲突.parent_t,也许吗?)
对于不受您控制的类型,如果类型集是已知的,则parent< T>也可能是外部类型特征.
标签:c,types,inheritance,parent,decltype 来源: https://codeday.me/bug/20191013/1910516.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。