小编ubb*_*bdd的帖子

具有参数的流操纵器如何工作?

在Stroustrup的C++书中,有一个自定义操纵器采用参数的例子(请参阅附带的代码).我对如何创建结构感到困惑.特别是,看起来"smanip"的构造函数有两个int参数,一个用于函数指针"ff",一个用于"ii".我不明白如何通过使用传递int参数来创建结构:

cout << setprecision(4) << angle;
Run Code Online (Sandbox Code Playgroud)

另外,调用这些函数的顺序是什么,以及如何确定类型参数Ch和Tr?非常感谢.

// manipulator taking arguments
struct smanip{
    iso_base& (*f) (ios_base&, int);
    int i;
    smanip(ios_base& (*ff)(ios_base&, int), int ii) : f(ff), i(ii){}
};

template<cladd Ch, class Tr>
ostream<Ch, Tr>& operator<<(ostream<Ch, Tr>& os, smanip& m){
    return m.f(os, m.i);
}

ios_base& set_precision(ios_base& s, int n){
    return s.setprecision(n); // call the member function
}

inline smanip setprecision(int n){
    return smanip(set_precision,n);
}

// usage:
cout << setprecision(4) << angle;
Run Code Online (Sandbox Code Playgroud)

c++ stream manipulators

8
推荐指数
2
解决办法
2783
查看次数

模板参数必须是类型吗?

在Bjarne Stroustrup C++ Book(第13章,第331页)中,它说"模板参数可用于后续模板参数的定义".它提供了以下代码:

template<class T, T def_val> class Cont{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供如何使用此模板的示例.例如,如何初始化Cont的对象?在我看来,"def_val"不是类型参数,不应该放在<>中.我错了吗?

非常感谢

c++ templates

6
推荐指数
2
解决办法
171
查看次数

字符串文字操作 - 复制字符

我试图在以下代码中实现一个简单的字符串副本.

但是,我在"*d =*c;"行中遇到了运行时错误.

谁能告诉我这有什么问题?

void test3()
{
    char *a="123456";
    char *b="000000";

    char *c=a;
    char *d=b;

    while(*c){
        *d = *c;
        cout << *c << endl;
        c++;
        d++;
    }

    *d='\0';
}
Run Code Online (Sandbox Code Playgroud)

c++ string copy character

-1
推荐指数
2
解决办法
231
查看次数

标签 统计

c++ ×3

character ×1

copy ×1

manipulators ×1

stream ×1

string ×1

templates ×1