请考虑以下代码:
template<bool> class StaticAssert;
template<> class StaticAssert<true> {};
StaticAssert< (-1 < sizeof(int)) > xyz1; // Compile error
StaticAssert< (-1 > sizeof(int)) > xyz2; // OK
Run Code Online (Sandbox Code Playgroud)
为什么是-1 > sizeof(int)真的?
-1提升到unsigned(-1)那时是真的吗unsigned(-1) > sizeof(int)?-1 > sizeof(int)相当于-1 > size_t(4)如果的sizeof(int)的是4,如果是这样的话,为什么-1 > size_t(4)是假的?这个C++标准是否合适?
我需要单纯形算法的强大C++源代码(是一种用于线性规划问题的数值解法的流行算法).
请不要链接到维基百科.我需要C++中的良好源代码,使用模板,清晰的用户友好名称,并且工作得很好.
优选地,算法必须检查不稳定的浮点计算.
我希望文本上面有文本(不是上标 - x^2),但是上面有文字\overbrace和文字.(同下文)
谢谢
请考虑以下代码:
template<class T, class F> struct X {};
template<class T, class F, T F::* m> struct Y {};
struct Foo {
int member;
typedef X<int, Foo> x_type; // works well
typedef Y<int, Foo, &Foo::member> y_type; // ERROR
};
typedef Y<int, Foo, &Foo::member> y_type2; // OK
Run Code Online (Sandbox Code Playgroud)
为什么编译器会生成错误?(VS2008)
新
我已将此错误发布到connect.microsoft.com.
在这里,我有以下类型的仿函数:
template<class T, class Foo, T Foo::*p>
struct X {
void operator()(Foo & f) {
(f.*p) = 12 * (f.*p); // simple example. could be more complex `operator()`
}
};
Run Code Online (Sandbox Code Playgroud)
和示例结构:
struct FF
{
int m;
int r;
};
Run Code Online (Sandbox Code Playgroud)
我想使用仿函数X,但我不想显式指定模板参数,如下所示:
void testforx()
{
std::vector<FF> cont(5);
std::for_each(cont.begin(), cont.end(), X<int, FF, &FF::r>() ); // it work, but I don't want to write `int` and `FF`
std::for_each(cont.begin(), cont.end(), createx<&FF::r>() ); // how I would like to use it, how to declare `createx` function? …Run Code Online (Sandbox Code Playgroud) 我有一个清单MyClass:
struct MyClass {
bool is_old_result(int lifetime);
};
std::list<MyClass> results;
int lifetime = 50; // or something else
Run Code Online (Sandbox Code Playgroud)
什么情况下删除更好(c ++设计和性能):
results.remove_if(
std::bind2nd(std::mem_fun_ref(&MyClass::is_old_result), lifetime));
Run Code Online (Sandbox Code Playgroud)
要么
results.remove_if(boost::bind(&MyClass::is_old_result, _1, lifetime));
Run Code Online (Sandbox Code Playgroud)
要么
struct RemoveFunctor {
RemoveFunctor (int lifetime) : lifetime(lifetime) {}
bool operator()(const MyClass & m) { return m.is_old_result(lifetime); }
private:
int lifetime;
};
results.remove_if(RemoveFunctor(lifetime));
Run Code Online (Sandbox Code Playgroud)
为什么?
PS请,没有lambda函数,没有C++ 0x.
请考虑以下代码
template<typename T, int N>
struct A {
typedef T value_type; // OK. save T to value_type
static const int size = N; // OK. save N to size
};
Run Code Online (Sandbox Code Playgroud)
看,如果此参数是typename或整数值,则可以保存任何模板参数.问题是指向成员的指针是一个偏移量,即整数.现在我想在编译时保存任何指向成员的指针:
struct Foo {
int m;
int r;
};
template<int Foo::*ptr_to_member>
struct B {
// Next statement DOES NOT WORK!
static int Foo::* const saved_ptr_to_member = ptr_to_member;
};
// Example of using
int main() {
typedef B<&Foo::m> Bm;
typedef B<&Foo::r> Br;
Foo foo;
std::cout << (foo.*(Bm::saved_ptr_to_member));
}
Run Code Online (Sandbox Code Playgroud)
如何在 …
是否可以看到TeX'预处理器'的输出,i.即 在实际输出完成之前的中间步骤,但是所有用户定义的宏都被替换,只剩下一部分TeX原语?
或者没有这样的中间步骤?
我有以下瓶颈功能.
typedef unsigned char byte;
void CompareArrays(const byte * p1Start, const byte * p1End, const byte * p2, byte * p3)
{
const byte b1 = 128-30;
const byte b2 = 128+30;
for (const byte * p1 = p1Start; p1 != p1End; ++p1, ++p2, ++p3) {
*p3 = (*p1 < *p2 ) ? b1 : b2;
}
}
Run Code Online (Sandbox Code Playgroud)
我想C++用SSE2内部函数替换代码.我试过_mm_cmpgt_epi8但它使用了签名比较.我需要无符号比较.
是否有任何技巧(SSE,SSE2,SSSE3)来解决我的问题?
注意: 在这种情况下,我不想使用多线程.
如何在编译时测试B类是否来自std :: vector?
template<class A>
struct is_derived_from_vector {
static const bool value = ????;
};
Run Code Online (Sandbox Code Playgroud)
如何在编译时测试B类是否来自模板系列?
template<class A, template< class > class Family>
struct is_derived_from_template {
static const bool value = ????;
};
Run Code Online (Sandbox Code Playgroud)
使用:
template<class T> struct X {};
struct A : X<int> {}
struct B : std::vector<char> {}
struct D : X<D> {}
int main() {
std::cout << is_derived_from_template<A, X>::value << std::endl; // true
std::cout << is_derived_from_template<D, X>::value << std::endl; // true
std::cout << is_derived_from_vector<A>::value << std::endl; // false …Run Code Online (Sandbox Code Playgroud) c++ ×8
templates ×4
latex ×2
tex ×2
algorithm ×1
assembly ×1
c++03 ×1
functor ×1
intrinsics ×1
modular ×1
optimization ×1
performance ×1
sfinae ×1
sizeof ×1
sse2 ×1
stl ×1
type-traits ×1
unsigned ×1