作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个类代表我系统中的数据。我正在寻找一种通用方法来定义它们的函数,例如给定一个类
class book
{
private:
std::string isbn;
std::string title;
std::string author;
}
我希望能够表达这样的功能
| -1, if title == 'Wuthering*'
f(book)=| 0, otherwise
或
| 100, if author == 'Douglas Adams'
f(book)=| 10, if author == 'D*'
| 0, otherwise
我事先不知道这些函数是什么,但我将不得不解释字符串来创建它们。
目标是让用户输入一个字符串,例如
book.author = 'Douglas Adams' -> 100; book.author = 'D*' -> 1;
然后根据该分数对书籍 vector 进行排序。
问题:是否有一个标准模式可以使用模板灵活定义这样的功能?
最佳答案
对我来说不需要模板
创建排序类并使用 std::sort
class Book
{
};
class BookValue
{
public:
virtual ~BookValue() {}
virtual int value( const Book& book ) = 0;
};
class TitleValue : public BookValue
{
virtual int value( const Book& book ) { return 0; }
};
class AuthorValue : public BookValue
{
virtual int value( const Book& book ) { return 1; }
};
class Comparator
{
public:
enum Mode
{
TitleMode, AuthorMode
};
Comparator( Mode mode )
{
if( TitleMode == mode )
{
bookValue = new TitleValue();
}
if( AuthorMode == mode )
{
bookValue = new AuthorValue();
}
}
~Comparator() { delete bookValue; }
inline bool operator() (const Book& b1, const Book& b2)
{
return bookValue->value( b1 ) < bookValue->value( b2 );
}
private:
BookValue* bookValue;
};
int main( int argc, char* argv[] )
{
Book b1;
Book b2;
std::vector< Book > v;
v.push_back( b1 );
v.push_back( b2 );
std::sort( v.begin(), v.end(), Comparator( Comparator::TitleMode ) );
}
关于c++ - 如何在表示整数数据结构的类上定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261187/
我是一名优秀的程序员,十分优秀!