c++ - 如何提取模板参数中传递的类型?
问题描述
在下面的代码中,我想将“某物”替换为允许我将“f”的类型声明为在 C 中传递的第二个参数(同时将 C 传递给 M 的模板)的东西,即,在这里浮动。
#include<iostream>
using namespace std;
template<class A, class B>
class C{
public :
A a;
B b;
};
template<class D>
class M{
public :
decltype(D::<something>) f; //!!!!!!!!!!!!!!!!
void show(){cout<<f;}
};
int main(){
M<C<int,float>> m;
m.show();
}
解决方案
你可以用一些技巧来做到这一点。
template<typename> class M; // leave undefined
template<template<typename, typename> D,
typename One,
typename Two>
class M<D<One, Two>> { // a specialisation
Two f;
};
现在你可以传递给M
一个只有两个模板参数的类(sich as C<int, float>
)。如果您传递其他内容(例如int
),则会出现错误。
推荐阅读
- r - 将数据框聚合到典型的年/周
- kotlin - 在 File.printWriter() 上未调用 Kotlin 使用块函数
- laravel - 根据 Laravel 中的多个值对字段进行排序
- python - 在对 numpy 数组进行子排列时,保持维度的最佳方法是什么?
- php - 在后增量中仅显示精确数字前后的 3 个数字
- python - 如何在 LXLE 上使用 Apache 和 mod_wsgi 服务 Django 应用程序
- java - 如何将使用 for 循环创建的按钮添加到 java 文件中的布局?
- python-2.7 - 负零如何在索引中起作用?
- android - 如何使用 android studio 发送应用邀请
- android - 我们如何在非活动类和非片段类中获取宽度和高度