0

わかりました、これは私を悩ませています、そして私はそれが簡単なことだと確信しています。基本的に、POCO というオープン ソースの C++ クライアントを使用して、クラス用の電子メール クライアントを作成しています...

基本的に、メール サーバーからメールを取得し、そのメールを MailMessage というオブジェクトに格納する pop3 クライアント オブジェクトがあります。今、添付ファイルを取得できるようにしたいのですが、それを行う必要があると思われる唯一の機能は次の機能です。

static const std::string & contentTransferEncodingToString(
    ContentTransferEncoding encoding
);

問題は、次のことが何であるかわからなかったということです。

ContentTransferEncoding エンコーディング

ソースコードを掘り下げた後、「列挙型」と関係があることがわかりました(ちなみにこれは公開されています):

enum ContentTransferEncoding
    {
        ENCODING_7BIT,
        ENCODING_8BIT,
        ENCODING_QUOTED_PRINTABLE,
        ENCODING_BASE64
    };

基本的に、開こうとしている添付ファイルは 7 ビット エンコーディングを使用しています。これらの列挙型を処理する方法と、それらを contentTransferEncodingToString 関数に渡す方法を知っている人はいますか?

あなたの努力に感謝します:)

編集:

だから、非現実的ですが、私がアクセスしようとしていた関数が保護されていることに気づきませんでした。それは列挙型ではありませんでした。そして、それらにアクセスしようとしていた方法も正しかったと思います = P. ただの大きな愚かな間違い。

しかし、あなたのすべての努力に感謝します!!! 素晴らしいコミュニティ:)

4

7 に答える 7

3

私はあなたの問題についてグーグルで検索しました、そして私はこれを見つけました:

http://www.appinf.com/docs/poco/Poco.Net.MailMessage.html#16563

完全な名前空間はPoco::Net :: Message :: ContentTransferEncodingであるため、次のいずれかを使用する必要があると想定します。


using namespace Poco::Net::Message;

また


string &s = contentTransferEncodingToString(Poco::Net::Message::ContentTransferEncoding::ENCODING_7BIT);
于 2009-11-24T08:57:24.393 に答える
3

あなたはどちらかを言うことができます

const std::string& s =  contentTransferEncodingToString(ENCODING_7BIT)

また

const std::string& s =  contentTransferEncodingToString(ContentTransferEncoding::ENCODING_7BIT)
于 2009-11-24T08:33:19.683 に答える
3

呼び出している関数が保護されていて静的であることは事実です。つまり、次のようなものが必要です。


class test : public Poco::Net::MailMessage{
  pubic:
    std::string myFunc(){
       // you can you the protected function here
       return ContentTransferEncoding(ENCODING_7BIT);
       // or 
       // because you have inherited all the class
       // return CTE_7BIT;

}
于 2009-11-24T09:30:58.367 に答える
2

非常に簡単です。列挙型の要素を使用して関数を呼び出すだけです。

std::string str = contentTransferEncodingToString(ENCODING_8BIT);

列挙型は列挙型です。たくさん定義することで同じ結果を得ることができます

const int ENCODING_7BIT = 0;
const int ENCODING_8BIT = 1;

しかし、関数に 8 を渡すとどうなるでしょうか? 列挙型を定義すると、

  • 許可するアイテムの数を制限する
  • それがどのように表現されるかについて心配する必要はありません (したがって、いくつかの抽象化があります)
于 2009-11-24T08:32:43.133 に答える
2

contentTransferEncodingToString を呼び出そうとするクラスは、Poco::NET::MailMessage を継承していますか?

メソッドcontentTransferEncodingToStringは public ではなく保護されているため、MailMessage を継承するクラスからのみ呼び出すことができます。

これが問題でない場合は、コンパイラによって出力されたエラー メッセージを正確に投稿してください。

于 2009-11-24T09:24:58.473 に答える
2

これらの列挙型を処理する方法と、それらを contentTransferEncodingToString 関数に渡す方法を知っている人はいますか?

いくつかの回答は、enums の基本的な使用方法を示しています。それらを試してみると、構文は正しいが、それらを使用するメソッドにはenums現在のスコープからアクセスできないというエラー メッセージが表示されます。

答えは、必要なものにアクセスできるスコープに入ることです。

問題のメソッドは明らかprotectedに です。これは、それらにアクセスする方法が派生クラスを介して行われることを意味します。これが良いデザインだと言っているわけではありませんが、POCO のデザイナーが使用を期待しているのは明らかです。

于 2009-11-24T09:38:33.080 に答える
0

だから、非現実的ですが、私がアクセスしようとしていた関数が保護されていることに気づきませんでした。それは列挙型ではなかったので、列挙型へのアクセスを提案した方法は正しかったです! そして、それらにアクセスしようとしていた方法も正しかったと思います = P. ただの大きな愚かな間違い。

しかし、あなたのすべての努力に感謝します!!! 素晴らしいコミュニティ:)

于 2009-11-24T19:21:07.523 に答える