我实际上正在开发一个项目,它有一个像这样的文件。
#include "Preference.h"
#include <string>
#include <list>
#include <exception>
namespace MedicalStudentMatcher
{
class PreferenceException: public std::exception
{
public:
PreferenceException(std::string message) : m_message(message) {}
virtual ~PreferenceException() { }
virtual const char* what() const throw()
{
return m_message.c_str();
}
private:
std::string m_message;
};
class PreferenceReader
{
public:
PreferenceReader(std::string filename);
virtual ~PreferenceReader();
std::list<Preference<std::string, std::string>> ReadPreferences();
private:
std::string m_filename;
std::string trim(std::string str);
};
}
现在的问题是
1.构造函数如何工作? (请记住,我是C ++中STL的新手,以及C ++中的任何一种高级方法)
2.解释what()函数的语法。(为什么有两个const然后是char *然后抛出)
3.以下行是什么意思
std::list<Preference<std::string, std::string>> ReadPreferences();
4。我想遍历这个列表。我该怎么做呢?
list<Preference<string, string>> hospitalPrefs = hospitalReader.ReadPreferences();
list<Preference<string, string>> studentPrefs = studentReader.ReadPreferences();
list<Match<string, string>> matches;
5。模板类如何在以下情况下工作
以及优先级如何使用它。什么是P m_preferrer声明?如何&#34;初始化列表&#34;在这种情况下工作?
template <class P, class O>
class Preference
{
private:
P m_preferrer;
O m_preferred;
int m_value;
public:
Preference(const P& preferrer, const O& preferred, int value) : m_preferrer(preferrer), m_preferred(preferred), m_value(value) {}
virtual ~Preference() {}
P getPreferrer() const { return m_preferrer; }
O getPreferred() const { return m_preferred; }
int getValue() const { return m_value; }
};
template <class P, class O>
bool less_than(const Preference<P, O>& p1, const Preference<P, O>& p2)
{
return p1.getValue() < p2.getValue();
}
}
即使经过彻底的谷歌搜索,我也找不到这些问题的答案。
请帮忙。如果您需要有关其他文件的更多信息,请发表评论。
答案 0 :(得分:2)
PreferenceException
构造函数使用&#34;初始化列表&#34;设置m_message
。现在您已了解该术语,您可以搜索它以了解更多信息。virtual const char* what() const throw()
声明&#34;一个虚拟(运行时多态)函数,它返回指向(数组)字符的指针,其中该指针不能用于修改这些字符。&#34;尾随&#34; const throw()&#34; mean&#34;此函数不能修改其隐式this
参数,即它不能修改调用它的类的实例,也不能抛出任何异常。&#34; list<Preference<string, string>> hospitalPrefs = hospitalReader.ReadPreferences();
for (Preference<string, string>& pref : hospitalPrefs)
{
// do something with pref
}
或者,如果您依赖于C ++ 98而不是C ++ 11:
list<Preference<string, string>> hospitalPrefs = hospitalReader.ReadPreferences();
for (list<Preference<string, string>>::iterator it = hospitalPrefs.begin(); it != hospitalPrefs.end(); ++it)
{
// do something with pref
}