在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) 在Bjarne Stroustrup C++ Book(第13章,第331页)中,它说"模板参数可用于后续模板参数的定义".它提供了以下代码:
template<class T, T def_val> class Cont{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
任何人都可以提供如何使用此模板的示例.例如,如何初始化Cont的对象?在我看来,"def_val"不是类型参数,不应该放在<>中.我错了吗?
非常感谢
我试图在以下代码中实现一个简单的字符串副本.
但是,我在"*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)