未定义类型的重载

时间:2015-04-07 06:18:52

标签: c++ boost

我正在尝试对模板函数进行一些重载,以下是示例

do_something.h

template<typename T>
void do_something(T const &input){/*....*/}

void do_something(std::string const &input);

void do_something(boost::container::string const &input);

到目前为止,这么好,但如果我想重载一个未定义的类型呢?

比如使用未在头文件中定义的类型some_type

void do_something(some_type const &input);

我想像这样使用它

的main.cpp

#include "do_something.h"
#include "some_type.h"

#include <boost/container/string.hpp>

int main()
{
     do_something(std::string("whatever"));
     do_something(boost::container::string("whatever"));

     //oops, some_type() never defined in the header file, this
     //function will call the template version, but this is not
     //the behavior user expected
     do_something(some_type());   
}

因为some_type不是POD,不是std :: string,所以我想设计一个特性进行编译时检查

template<typename T>
typename boost::enable_if<is_some_type<T>::value, T>::type
do_something(T const &input){//.....}

但我有更好的方法吗?

我需要编译时间类型检查,所以我使用模板。调用此函数的所有类型都会根据不同的类型执行类似的工作,所以我更喜欢重载。我不需要保存状态,所以我更喜欢函数而不是比上课。 希望这可以帮助你更多地了解我打算做什么。谢谢你

1 个答案:

答案 0 :(得分:3)

  

但如果我想重载一个未定义的类型怎么办?

您需要提供

的声明
void do_something(some_type const &input);

在使用do_something类型的对象调用some_type之前。否则,将使用模板版本。

#include "do_something.h"
#include "some_type.h"

// This is all you need. You can implement the function here
// or any other place of your choice.
void do_something(some_type const &input);

#include <boost/container/string.hpp>

int main()
{
     do_something(std::string("whatever"));
     do_something(boost::container::string("whatever"));

     //oops, some_type() never defined in the header file, this
     //function will call the template version, but this is not
     //the behavior user expected
     do_something(some_type());   
}