my iterator *运算符返回对class:File
的引用<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/infoview_title" android:textSize="@dimen/textSizeBig"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/infoview_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/infoview_link" android:clickable="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/md_orange_700"/>
</LinearLayout>
我创建了另一个类:
File& FilesIterator::operator*() {
return *m_pFile;
}
在代码的另一部分中,我需要公开类TextFile的公共函数 在我使用*运算符之后。
我该怎么做?
由于
答案 0 :(得分:0)
&#34;我该怎么做?&#34;
您的代码已经公开了引用,您可能只需要在File
中将{em> function 声明为virtual
或纯virtual
功能:
class File {
public:
virtual void foo() = 0;
};
class TextFile : public File {
public:
virtual void foo() {
// Provide an implementation for foo()
}
};
关于comments的澄清:
&#34;我也有
class Directory : public File
&#34;
另一种方法是为virtual
,File
和Directory
提供TextFile
析构函数,并使用dynamic_cast<TextFile&>(*it);
:
class File {
public:
virtual ~File() {}
};
class TextFile : public File {
public:
virtual ~TextFile() {}
};
class Directory : public File {
public:
virtual ~File() {}
};
int main() {
Directory d("/my/directory/path");
FilesIterator it = d.begin();
while(it != d.end()) {
File* f = &(*it);
Directory* directoryEntry =
dynamic_cast<Directory*>(f);
TextFile* textFileEntry =
dynamic_cast<Directory*>(f);
if(directoryEntry ) {
// Proceed with Directory specific code
}
else if(textFileEnty) {
// Proceed with TextFile specific code
}
else {
// Whatever ???
}
++it; // Process next entry
}
}