小编Ste*_*phQ的帖子

没有参数的预处理器宏和零参数的宏之间有什么区别

有什么理由比较喜欢

#define MY_MACRO() ..stuff..
Run Code Online (Sandbox Code Playgroud)

#define MY_MACRO ..stuff..
Run Code Online (Sandbox Code Playgroud)

不要使用宏不是一个有效的答案......

macros c-preprocessor

28
推荐指数
2
解决办法
6150
查看次数

从C++(STL)中的(it)迭代器类型获取容器类型

给定一个容器来获取相关的迭代器很容易,例如:

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)

可能吗?如果没有,为什么?

预先感谢您的任何帮助!

c++ templates stl metaprogramming

19
推荐指数
2
解决办法
4742
查看次数

C++从istream读取直到换行符(但不是空格)

我有一个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.

你会如何实现这个结果?我想那个条件

非常感谢您的帮助!

c++ iostream

18
推荐指数
2
解决办法
4万
查看次数

使用boost :: mpl :: bool_而不是const bool的优点

我对使用它的优点感到困惑

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作为第一个(模板)参数.

这个决定背后有什么争论?

预先感谢您的帮助!

c++ templates metaprogramming

9
推荐指数
2
解决办法
1792
查看次数

禁止将const的指针/引用转换为C++中的临时对象(无C++ 0X)

我面临以下问题.考虑以下课程:

//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).

c++ boost metaprogramming

8
推荐指数
1
解决办法
263
查看次数

基于嵌套typedef的存在来键入决策

我需要定义一个模板结构,以便:

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是常数.

我真的很挣钱,任何建议都非常感谢!:)

非常感谢您的帮助!

c++ templates metaprogramming

7
推荐指数
1
解决办法
802
查看次数

使用facet_wrap时,显示每个散点图的回归方程和R ^ 2

我有一个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相同的问题.

r ggplot2

7
推荐指数
1
解决办法
8350
查看次数

C++ MPL or_,and_ implementation

我正在尝试阅读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

提前感谢您的任何帮助/建议.

c++ templates metaprogramming

6
推荐指数
1
解决办法
534
查看次数

C++通过继承在受保护的构造函数的基类堆上分配对象

我有一个带有受保护构造函数的类:

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

提前感谢您的任何建议!

亲切的问候

c++ inheritance

6
推荐指数
1
解决办法
676
查看次数

C++固定大小的数组与相同类型的多个对象

我想知道(除了明显的语法差异)是否有一个类包含一个对象(相同类型的)的多个实例或该类型的固定大小的对象数组之间的任何效率差异.

在代码中:

struct A {
  double x;
  double y;
  double z;
};

struct B {
  double xvec[3];
};
Run Code Online (Sandbox Code Playgroud)

实际上我会使用boost :: arrays,它是C风格数组的更好的C++替代品.

我主要关注构造/破坏和读/写这样的双打,因为这些类通常只是为了调用它们的一个成员函数而构造一次.

感谢您的帮助/建议.

c c++ micro-optimization

5
推荐指数
2
解决办法
671
查看次数

具有bsd / mit的C特殊数学功能-如许可证

您是否知道非gpl许可可用的C语言的特殊数学函数(如gamma,beta,错误和反错误函数)的可靠(即有效和准确)实现?BSD或MIT许可证都可以。

就像这样:http : //www.gnu.org/software/gsl/manual/html_node/Special-Functions.html

但许可更为宽松。我知道boost具有类似的功能,但是仅仅为此添加对boost的依赖有点过大。

谢谢!

c math

5
推荐指数
0
解决办法
1583
查看次数

使用C中的printf等效C++ std :: setprecision(20)

我想以十进制表示法以完全精度打印双打(但在数字的末尾没有额外的零).在C++中我可以使用:

std::setprecision(20);
cout << d; // Here d is a double
Run Code Online (Sandbox Code Playgroud)

什么是使用printf的等效C代码?

c c++

5
推荐指数
2
解决办法
1万
查看次数

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)

这可能吗?

感谢您提前帮助我解决这个看似奢侈的问题:)

c++ c-preprocessor

4
推荐指数
1
解决办法
5819
查看次数