gpt4 book ai didi

c++ - 如何在表示整数数据结构的类上定义函数

转载 作者:行者123 更新时间:2023-11-28 02:24:15 25 4
gpt4 key购买 nike

我有几个类代表我系统中的数据。我正在寻找一种通用方法来定义它们的函数,例如给定一个类

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 进行排序。

问题:是否有一个标准模式可以使用模板灵活定义这样的功能?

最佳答案

对我来说不需要模板

  • 创建用于分配账面值(value)的接口(interface)
  • 实现它以按标题、作者计算值(value)
  • 创建排序类并使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com