对具有不同返回类型的重载运算符的enable_if

时间:2010-09-01 19:33:16

标签: c++ templates boost operator-overloading

我试图在这里基本上做三件事:使用模板重载赋值运算符,限制类型(使用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只是因为我希望它只是跳过模板,如果它不是有效类型(不会抛出错误)。

任何人都知道如何做到这一点?

1 个答案:

答案 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.
}