簡體   English   中英

C ++基本自定義cout打印要考慮

[英]C++ basic custom cout printing to consle

template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{
    os << s << " = (\n";

    os << charInput1;
    std::copy(first, last, std::ostream_iterator<int>(std::cout, "\n"));
    os << charInput2;

    os << "\n)";
}

我正在嘗試進行自定義提示打印。 該成員函數屬於CustomPrinter類,並且charInput1charInput2是其私有char成員,在構造自定義打印機時會定義它們。 firstlast應該是迭代器,並且s是一個字符串。

因此,例如,給定的charInput1是一個+號,而charInput2是一個句點. ,在std::vector<int> = {1, 1, 1}的情況下,我希望最終輸出如下:

(
+1.
+1.
+1.
)

但是我越來越

(
+1
1
1
.
)

所以我的問題是,要在每個矢量元素之間打印給定的char ,還需要什么? 是否可以僅使用std::ostream_iterator<int>(std::cout, /* char here? */) 因為似乎此方法只能在之間插入字符串,所以我也需要在前面插入。 如果沒有,有什么更好的方法? 提前致謝!

編輯:在我主要

CustomPrinter cp(std::cout, '+', '.');
std::vector<int> v = {1, 1, 1};
cp.print("result", v.begin(), v.end()); // function call..

只需使用普通循環即可:

template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{
    os << s << " = (\n";
    for (auto el = first; el != last; el++) {
        os << charInput1 << *el << charInput2 << "\n";
    }    
    os << ")";
}

實際上,您可以使用std::ostream_iterator ,方法是串聯周圍的字符。

template<typename T, typename F, typename L>
void print(const T& s, F first, L last)
{

    std::string sep = charInput1 + std::string("\n") + charInput2;
    os << s << " = (\n";
    if (first != last) { // Don't print first prefix and last suffix if the sequence is empty
        os << charInput1;
        std::copy(first, last, std::ostream_iterator<int>(std::cout, sep.c_str()));
        os << charInput2;
    }
    os << "\n)";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM