从不同的变量模板类型构建变量的模板类型
Building a variable's template type from a different variables template type
如果我有一个类型为模板化类的变量,并且我想构建另一个不同模板化类的变量,但使用相同的模板参数,我该怎么做?
虽然下面的示例不起作用,但它希望能给出我想要实现的目标的想法。如果没有非常具体的方法可以做到这一点,有没有办法有某种查找表设计模式来做到这一点?我最终可能会使用六种左右不同的模板化类型。
template<typename T>
class A{
public:
typedef T Type;
};
template<typename T>
class B{};
int main(void){
A<int> var1;
B<var1::Type> var2;
}
如果这是一个重复的问题,我深表歉意,但我以前没有看到这样的事情。
编辑
我想要一种方法可以与Visual Studio 2010和gcc一起使用,而无需使用第三方库。因此,并非所有 11 C++功能都受支持。
此外,不使用typedef A<int>
或不知道A<int>
,因为此代码只是一个测试用例场景,用于显示我想要的基本功能。我想要一种方法从类型为模板的变量中获取模板类型。
即使使用 VC++ 2010 的预标准化 decltype,我认为您也可以做这样的事情:
template<typename T>
struct A {
typedef T Type;
Type foo();
};
template<typename T>
struct B {};
int main() {
A<int> var1;
B<decltype(var1.foo())> var2;
}
这取决于是否能够形成使用所需类型的表达式。
在 C++11 中您可以使用decltype
:
B<decltype(var1)::Type> var2;
它应该有效。请参阅此处和此处的 decltype。
如果您想在 C++03 中执行类似操作,可以尝试在模板化函数中应用您的功能:
template <typename T>
void doSomething(const T& var1) {
B<typename T::Type> var2;
// do whatever you wanted to do with var2 here.
// problem is, you cannot return it.
std::cout << "Doing something!n";
}
int main(void){
A<int> var1;
doSomething(var1);
}
编辑:感谢@MSalters指出您在VS2010中有auto
关键字,因此可以定义此函数:
template <typename T>
B<typename T::Type> makeB(const T&) {
return B<typename T::Type>();
}
然后像这样使用它:
int main(void){
A<int> var1;
auto var2 = makeB(var1);
}
相关文章:
- 从模板创建通用打印函数,以打印基元数据类型变量的值
- 指针数据类型变量如何包含对象?
- 将 static_cast<int>(-15) 分配给静态常量字符类型变量
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- 如何为结构类型变量赋值
- 如何将字符类型变量附加到字符串中?
- 共享或私有 openmp 代码中的结构化类型变量
- 有没有办法在 c++ 中制作类型变量?
- 从其他类声明类类型变量会给出 C2143 错误(在"*"之前缺少";")
- 如何检查类中定义的枚举类型变量是否被分配给?
- 将子类实例保存在父类型变量中并通过父变量使用 Child 函数?
- 是否可以在没有结构的情况下创建新的类型变量?
- 为什么类型变量;不调用默认 CTR
- 如何使用CIN将输入整数值获取到char类型变量中
- 如何为 char** 类型变量提供适当的值,以便将其分配给字符串变量
- 在C++标准中哪里说必须初始化 const 内置类型变量的定义
- 为什么可以将其他类型变量用作C 中常量参考参数参数的参数
- Eclipse CDT 打开声明的自动类型变量
- 如何计算长长类型变量中的位数
- 将自动类型变量初始化为零.这种类型安全吗?