要在for循环中更改的模板参数? 我有一个问题(我想)C++(在C++ 11之前,我现在不能升级)模板编程(和“特性”)。
我的目标是: 我有不同(但非常相似)的类(已经从具有新功能和成员的基类派生出了类) 我编写了一个模板类,它继承了这些类中的任何一个,并使用多态函数“open”从数据库中收取与特定类相关的所有成员和信息 我之所以想到这个策略,是因为我想使用这个实例化类(及其所有成员)作为其他函数的输入。 我本来可以用switch/case架构来实现它(我想..但是这里我的模板类可以从模板参数中的类继承…),但是我想在这里避免它,因为它在以后已经被大量使用了 例如,我有Derived1和Derived2类(在一个Derived.hpp文件中定义),它们覆盖其根父类的函数open。 我有一个模板函数MyClass,它曾经像 MyClass要在for循环中更改的模板参数? 我有一个问题(我想)C++(在C++ 11之前,我现在不能升级)模板编程(和“特性”)。,c++,templates,c++11,C++,Templates,C++11,我的目标是: 我有不同(但非常相似)的类(已经从具有新功能和成员的基类派生出了类) 我编写了一个模板类,它继承了这些类中的任何一个,并使用多态函数“open”从数据库中收取与特定类相关的所有成员和信息 我之所以想到这个策略,是因为我想使用这个实例化类(及其所有成员)作为其他函数的输入。 我本来可以用switch/case架构来实现它(我想..但是这里我的模板类可以从模板参数中的类继承…),但是我想在这里避免它,因为它在以后已经被大量使用了 例如,我有Derived1和Derived2类(在一个D
For (auto i=1; i<N; ++i)
{
MyClass<DerivedType[i]> currentClass();
--- other things to do with my currentClass ---
}
模板在编译时实例化,
for()
循环在运行时求值。所以不,你不能这么做 要在模板定义上“循环”,您可以使用以下结构:
template<int N>
struct A {
typedef A<N - 1> X;
};
template<>
struct A<0> {
typedef void X;
};
模板
结构A{
typedef A X;
};
模板
结构A{
typedef void X;
};
使用可变模板,您可以执行以下操作:
template <typename T>
void do_job()
{
// job for one type
// MyClass<T> currentClass;
// ...
}
template <typename ... Ts>
void do_jobs()
{
// trick to unroll the types sequentially
std::initializer_list<int>{(do_job<Ts>(), 0)...};
}
模板
void do_job()
{
//一种类型的工作
//MyClass当前类;
// ...
}
模板
void do_jobs()
{
//按顺序展开类型的技巧
std::初始值设定项_列表{(do_job(),0)…};
}
并称之为:
do_jobs<Derived1, Derived2>();
do_jobs();
@MyName希望还没有破灭。看我的更新。嘿,这真聪明!我需要更好地理解你的观点。。。但是,一定要深入挖掘。当然@MyName THX;-)。这不是一个很聪明的例子,但你似乎掌握了重点。这种技术通常被称为。最有前途的例子之一是如何使用这种技术创建阶乘值。
template<int N>
struct A {
typedef A<N - 1> X;
};
template<>
struct A<0> {
typedef void X;
};
template <typename T>
void do_job()
{
// job for one type
// MyClass<T> currentClass;
// ...
}
template <typename ... Ts>
void do_jobs()
{
// trick to unroll the types sequentially
std::initializer_list<int>{(do_job<Ts>(), 0)...};
}
do_jobs<Derived1, Derived2>();