我试图在这里基本上做三件事:使用模板重载赋值运算符,限制类型(使用boost :: enable_if),并具有特定的返回类型。
以此为例:
template <class T>
std::string operator =(T t) { return "some string"; }
现在,根据boost enable_if(第3章,第1页,第1页),我将不得不使用enable_if作为返回类型,因为我正在重载一个只能接受一个参数的运算符。但是,我希望返回类型为b字符串,因此它可能不一定与模板参数的类型相同。
我想使用enable_if只是因为我希望它只是跳过模板,如果它不是有效类型(不会抛出错误)。
任何人都知道如何做到这一点?
答案 0 :(得分:3)
#include <iostream>
#include <boost/utility/enable_if.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/contains.hpp>
class FooBar
{
public:
FooBar () {}
~FooBar () {}
template <typename T>
typename boost::enable_if <
typename boost::mpl::contains <
boost::mpl::vector<std::string, int>, T>::type,
std::string>::type
operator = (T v)
{
return "some string";
}
};
int
main ()
{
FooBar bar;
bar = 1;
bar = std::string ("foo");
// bar = "bar"; // This will give a compilation error because we have enabled
// our operator only for std::string and int types.
}