扩展 boost::文件系统::p ath 和重载赋值运算符
Extending on boost::filesystem::path and overloading assignment operator
我知道已经有几个主题与重载基类的复制和赋值运算符有关 - 但是经过两天的尝试,我无法使用boost::filesystem::p ath正确执行此操作。
我目前拥有的:
using namespace boost::filesystem;
class MyPath: public path
{
public:
template<class C>
MyPath(const C* p): path(p)// dispatch to base copy constructor
{
//http://stackoverflow.com/questions/1226634/how-to-use-base-classs-constructors-and-assignment-operator-in-c
//this one seems to be OK
}
MyPath& operator=(const MyPath& p)
{
path::operator=(p);
return *this;
}
bool myStuff(){/*...*/}
/* ... */
}
然后,我使用 MyPath 类,就像之前的"path"一样:
using namespace std;
using namespace boost::filesystem;
list<MyPath> files_list;
MyPath input_folder("a valid path");
copy(recursive_directory_iterator(input_folder), recursive_directory_iterator(), back_inserter(files_list));
这段代码在 path 上工作正常,但在 MyPath 中,我在赋值运算符方面遇到了问题,我还没有弄清楚 std::list 和迭代器需要的运算符 = 的格式是什么。
g++ -g -Ic:/mingw/include -c main.cpp
In file included from c:mingwincludec++4.8.1bitschar_traits.h:39:0,
from c:mingwincludec++4.8.1ios:40,
from c:mingwincludec++4.8.1ostream:38,
from c:mingwincludec++4.8.1iostream:39,
from main.cpp:1:
c:mingwincludec++4.8.1bitsstl_algobase.h: In instantiation of 'static _OI std::__copy_move<<anonymous>, <anonymous>, <template-parameter-1-3> >::__copy_m(_II, _II, _OI) [with _II = boost::filesystem::recursive_directory_iterator; _OI = std::back_insert_iterator<std::list<MyPath> >; bool <anonymous> = false; bool <anonymous> = false; <template-parameter-1-3> = std::input_iterator_tag]':
c:mingwincludec++4.8.1bitsstl_algobase.h:390:70: required from '_OI std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = boost::filesystem::recursive_directory_iterator; _OI = std::back_insert_iterator<std::list<MyPath> >]'
c:mingwincludec++4.8.1bitsstl_algobase.h:428:38: required from '_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove = false; _II = boost::filesystem::recursive_directory_iterator; _OI = std::back_insert_iterator<std::list<MyPath> >]'
c:mingwincludec++4.8.1bitsstl_algobase.h:460:17: required from '_OI std::copy(_II, _II, _OI) [with _II = boost::filesystem::recursive_directory_iterator; _OI = std::back_insert_iterator<std::list< MyPath> >]'
main.cpp:23:115: required from here
c:mingwincludec++4.8.1bitsstl_algobase.h:305:16: error: no match for 'operator=' (operand types are 'std::back_insert_iterator<std::list<MyPath> >' and 'boost::filesystem::directory_entry')
*__result = *__first;
^
c:mingwincludec++4.8.1bitsstl_algobase.h:305:16: note: candidates are:
In file included from c:mingwincludec++4.8.1bitsstl_algobase.h:67:0,
from c:mingwincludec++4.8.1bitschar_traits.h:39,
from c:mingwincludec++4.8.1ios:40,
from c:mingwincludec++4.8.1ostream:38,
from c:mingwincludec++4.8.1iostream:39,
from main.cpp:1:
c:mingwincludec++4.8.1bitsstl_iterator.h:436:7: note: std::back_insert_iterator<_Container>& std::back_insert_iterator<_Container>::operator=(const typename _Container::value_type&) [with _Container = std::list<MyPath>; typename _Container::value_type = MyPath]
operator=(const typename _Container::value_type& __value)
^
c:mingwincludec++4.8.1bitsstl_iterator.h:436:7: note: no known conversion for argument 1 from 'boost::filesystem::directory_entry' to 'const value_type& {aka const MyPath&}'
c:mingwincludec++4.8.1bitsstl_iterator.h:443:7: note: std::back_insert_iterator<_Container>& std::back_insert_iterator<_Container>::operator=(typename _Container::value_type&&) [with _Container = std::list<MyPath>; typename _Container::value_type = MyPath]
operator=(typename _Container::value_type&& __value)
^
c:mingwincludec++4.8.1bitsstl_iterator.h:443:7: note: no known conversion for argument 1 from 'boost::filesystem::directory_entry' to 'std::list<MyPath>::value_type&& {aka MyPath&&}'
c:mingwincludec++4.8.1bitsstl_iterator.h:402:11: note: std::back_insert_iterator<std::list<MyPath> >& std::back_insert_iterator<std::list<MyPath> >::operator=(const std::back_insert_iterator<std::list< MyPath> >&)
class back_insert_iterator
^
c:mingwincludec++4.8.1bitsstl_iterator.h:402:11: note: no known conversion for argument 1 from 'boost::filesystem::directory_entry' to 'const std::back_insert_iterator<std::list<MyPath> >&'
c:mingwincludec++4.8.1bitsstl_iterator.h:402:11: note: std::back_insert_iterator<std::list<MyPath> >& std::back_insert_iterator<std::list<MyPath> >::operator=(std::back_insert_iterator<std::list<MyPath> >&&)
c:mingwincludec++4.8.1bitsstl_iterator.h:402:11: note: no known conversion for argument 1 from 'boost::filesystem::directory_entry' to 'std::back_insert_iterator<std::list<MyPath> >&&'
make: *** [main.o] Error 1
编译器会告诉你你需要什么:
'operator=' (operand types are 'std::back_insert_iterator<std::list<MyPath> >' and 'boost::filesystem::directory_entry')
所以你需要再实现一种方法(至少)。
相关文章:
- 继承函数的重载解析
- 你能重载对象变量名本身返回的内容吗
- 从父命名空间重载类型
- 使用C++中的模板和运算符重载执行矩阵运算
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 重载操作程序时出错>>用于类中的字符串 memebr
- 一个关于在C++中重载布尔运算符的问题
- 不同翻译单元中不可重载的非内联函数定义
- 为什么使用SFINAE而不是函数重载
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 将重载的成员函数传递给函数模板
- c++:可变模板和函数重载
- 重载元组索引运算符-C++
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 重载==不适用于二进制树
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 重载运算符new[]的行为取决于析构函数
- 正在尝试重载二进制搜索树分配运算符
- 重载Singly Linked List中的赋值运算符
- 扩展 boost::文件系统::p ath 和重载赋值运算符