首页 > 解决方案 > 如何提取模板参数中传递的类型?

问题描述

在下面的代码中,我想将“某物”替换为允许我将“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();
}

标签: c++c++11templatesparameterstemplate-classes

解决方案


你可以用一些技巧来做到这一点。

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),则会出现错误。


推荐阅读