是否可以通过参数而不是类型来专门化模板类?
目标是拥有一个舒适的界面,并尽可能减少执行时间。 目前,我知道三种具有不同好处的选择。
第一种可能性不符合执行时间要求。
第二种可能性没有一个很好的界面,因为每个人都必须知道有多个类的行为截然不同。
第三个解决方案是我的最爱,因此需要将类型声明为开关。
所以我正在寻找1.和3之间的混合物。
我可能缺少正确的关键词来搜索。
这是我到目前为止所知道的可能性:
#include <iostream>
/**
* opt1 -- switch at runtime
*/
class inoutslow
{
public:
inoutslow(bool b): _switch(b)
{
if(_switch)
std::cout << "slowIn1" << std::endl;
else
std::cout << "slowIn2" << std::endl;
}
~inoutslow()
{
if(_switch)
std::cout << "slowOut1" << std::endl;
else
std::cout << "slowOut2" << std::endl;
}
private:
bool _switch;
};
/**
* opt2 -- different self defined classes
*/
class inout1
{
public:
inout1(){std::cout << "in1" << std::endl;}
~inout1(){std::cout << "out1" << std::endl;}
};
class inout2
{
public:
inout2(){std::cout << "in2" << std::endl;}
~inout2(){std::cout << "out2" << std::endl;}
};
/**
* opt3 -- specialized template
*/
struct trueType;
struct falseType;
template<typename T>
class inout
{
public:
inout(){std::cout << "DefaultTin" << std::endl;}
~inout(){std::cout << "DefaultTout" << std::endl;}
};
template <>
class inout<trueType>
{
public:
inout(){std::cout << "Tin1" << std::endl;}
~inout(){std::cout << "Tout1" << std::endl;}
};
template <>
class inout<falseType>
{
public:
inout(){std::cout << "Tin2" << std::endl;}
~inout(){std::cout << "Tout2" << std::endl;}
};
int main()
{
inoutslow i(true);
inoutslow j(false);
inout1 ii;
inout2 jj;
inout<trueType> iii;
inout<falseType> jjj;
}
答案 0 :(得分:0)
谢谢大家-对于所有可能找到此问题而不是Using template instead of switch的人
/**
* opt 4
*/
template<bool _switch>
class inoutT;
template <>
class inoutT<true>
{
public:
inoutT(){std::cout << "TTin1" << std::endl;}
~inoutT(){std::cout << "TTout1" << std::endl;}
};
template <>
class inoutT<false>
{
public:
inoutT(){std::cout << "TTin2" << std::endl;}
~inoutT(){std::cout << "TTout2" << std::endl;}
};