有什么理由比较喜欢
#define MY_MACRO() ..stuff..
Run Code Online (Sandbox Code Playgroud)
至
#define MY_MACRO ..stuff..
Run Code Online (Sandbox Code Playgroud)
不要使用宏不是一个有效的答案......
给定一个容器来获取相关的迭代器很容易,例如:
std::vector<double>::iterator i; //An iterator to a std::vector<double>
Run Code Online (Sandbox Code Playgroud)
我想知道在给定迭代器类型的情况下是否有可能推断出"相应容器"的类型(这里我假设每个容器都有一个且只有一个(非常量)迭代器).
更确切地说,我想要一个适用于所有STL容器的模板元函数(无需为每个单个容器手动专门化),例如:
ContainerOf< std::vector<double>::iterator >::type
Run Code Online (Sandbox Code Playgroud)
评估为
std::vector<double>
Run Code Online (Sandbox Code Playgroud)
可能吗?如果没有,为什么?
预先感谢您的任何帮助!
我有一个std :: istream引用矩阵数据,如:
0.0 1.0 2.0
3.0 4.0 5.0
Run Code Online (Sandbox Code Playgroud)
现在,为了评估列数,我想要一些代码,如:
std::vector<double> vec;
double x;
while( (...something...) && (istream >> x) )
{
vec.push_back(x);
}
//Here vec should contain 0.0, 1.0 and 2.0
Run Code Online (Sandbox Code Playgroud)
在...读取2.0之后......某事情...评估为false,并且该点的istream应该是3.0以便下一个
istream >> x;
Run Code Online (Sandbox Code Playgroud)
应该将x设置为3.0.
你会如何实现这个结果?我想那个条件
非常感谢您的帮助!
我对使用它的优点感到困惑
bool_<true>
Run Code Online (Sandbox Code Playgroud)
和
bool_<false>
Run Code Online (Sandbox Code Playgroud)
在模板元编程的上下文中简单地使用const bools的类型.
boost :: mpl库显然更喜欢第一种方法,并定义辅助函数,如and_,or_来帮助管理这样的bool_.像if_"取"一个bool_作为第一个(模板)参数的条件元函数,但在幕后"调用"一个if_c元函数,它期望(const)bool作为第一个(模板)参数.
这个决定背后有什么争论?
预先感谢您的帮助!
我面临以下问题.考虑以下课程:
//Will be similar to bost::reference_wrapper
template<class T>
class Ref {
public:
explicit Ref(T& t) : m_ptr(&t) {}
private:
T* m_ptr;
};
Run Code Online (Sandbox Code Playgroud)
而这个函数返回一个double
double fun() {return 1.0;}
Run Code Online (Sandbox Code Playgroud)
如果我们现在有
double x = 1.0;
const double xc = 1.0;
Ref<double> ref1(x); //OK
Ref<const double> refc1(cx); //OK
Run Code Online (Sandbox Code Playgroud)
不过到目前为止好了:
//Ref<double> ref2( fun() ); //Fails as I want it to
Ref<const double> refc2( fun() ); //Works but I would like it not to
Run Code Online (Sandbox Code Playgroud)
有没有办法修改Ref(你喜欢的方式)而不是函数fun,所以最后一行返回编译时错误?请注意,您可以修改构造函数签名(只要我能够按预期初始化Ref).
我需要定义一个模板结构,以便:
element<T>::type
Run Code Online (Sandbox Code Playgroud)
是类型:
T::element_type
Run Code Online (Sandbox Code Playgroud)
如果T包含一个名为element_type的(公共)typedef,否则(如果它不包含这样的typedef)
element<T>::type
Run Code Online (Sandbox Code Playgroud)
是类型的
T::value_type
Run Code Online (Sandbox Code Playgroud)
如果T是可变的和类型
const T::value_type
Run Code Online (Sandbox Code Playgroud)
如果T是常数.
我真的很挣钱,任何建议都非常感谢!:)
非常感谢您的帮助!
我有一个data.frame(我使用融化函数融化),我从中生成多个散点图并使用以下方法拟合回归线:
ggplot(dat, aes(id, value)) + geom_point() + geom_smooth(method="lm", se=FALSE) + facet_wrap(variable~var1, scales="free")
Run Code Online (Sandbox Code Playgroud)
我想在每个散点图中添加回归方程和R ^ 2 用于相关回归(即每个散点图中由geom_smooth产生的回归方程).
上面的var1只是融化数据的一个id列的名称,我面对与facet_wrap的facet_grid instad相同的问题.
我正在尝试阅读boost标头,以弄清楚他们是如何设法实现的
or_<...>
Run Code Online (Sandbox Code Playgroud)
和
and_<...>
Run Code Online (Sandbox Code Playgroud)
元功能使:
1)他们可以有任意数量的参数(好吧,说多达5个参数)
2)它们具有短路行为,例如:
or_<false_,true_,...>
Run Code Online (Sandbox Code Playgroud)
不会实例化true_之后的任何内容(因此它也可以声明但未定义)
不幸的是,预处理器元编程让我无法完成任务:P
提前感谢您的任何帮助/建议.
我有一个带有受保护构造函数的类:
class B {
protected:
B(){};
};
Run Code Online (Sandbox Code Playgroud)
现在我从它派生并定义了两个静态函数,我设法实际创建了类B的对象,但不是在堆上:
class A : public B {
public:
static B createOnStack() {return B();}
//static B* createOnHeap() {return new B;} //Compile time Error on VS2010
};
B b = A::createOnStack(); //This works on VS2010!
Run Code Online (Sandbox Code Playgroud)
问题是:1)VS2010在允许第一种情况下是错误的吗?2)是否可以在不修改B的情况下创建B的对象(没有友谊,也没有额外的功能).我问,因为在处理B及其成员函数的实例时可以做出类似的事情,请参阅:http: //accu.org/index.php/journals/296
提前感谢您的任何建议!
亲切的问候
我想知道(除了明显的语法差异)是否有一个类包含一个对象(相同类型的)的多个实例或该类型的固定大小的对象数组之间的任何效率差异.
在代码中:
struct A {
double x;
double y;
double z;
};
struct B {
double xvec[3];
};
Run Code Online (Sandbox Code Playgroud)
实际上我会使用boost :: arrays,它是C风格数组的更好的C++替代品.
我主要关注构造/破坏和读/写这样的双打,因为这些类通常只是为了调用它们的一个成员函数而构造一次.
感谢您的帮助/建议.
您是否知道非gpl许可可用的C语言的特殊数学函数(如gamma,beta,错误和反错误函数)的可靠(即有效和准确)实现?BSD或MIT许可证都可以。
就像这样:http : //www.gnu.org/software/gsl/manual/html_node/Special-Functions.html
但许可更为宽松。我知道boost具有类似的功能,但是仅仅为此添加对boost的依赖有点过大。
谢谢!
我想以十进制表示法以完全精度打印双打(但在数字的末尾没有额外的零).在C++中我可以使用:
std::setprecision(20);
cout << d; // Here d is a double
Run Code Online (Sandbox Code Playgroud)
什么是使用printf的等效C代码?
我想写一个C++宏,采取任意参数,如:
#define MANIP(...) \
//Implementation
Run Code Online (Sandbox Code Playgroud)
这样的写作
MANIP(m_a, m_b, m_c);
Run Code Online (Sandbox Code Playgroud)
扩展到
f(a, b, c);
g("a", "b", "c");
Run Code Online (Sandbox Code Playgroud)
这可能吗?
感谢您提前帮助我解决这个看似奢侈的问题:)