小编Jur*_*aho的帖子

MSVC错误的线程安全

errno在MSVC上是否是线程安全的?

根据这个问题的答案,POSIX要求errno是线程安全的.但MSVC可能不符合POSIX,MSDN也没有说明线程安全.MSDN矛盾提及errno被宣称为extern int errno;,但也作为#define errno (*_errno())

c thread-safety visual-c++

11
推荐指数
1
解决办法
1781
查看次数

如何使用sscanf读取数据崩溃?

Cppcheck在这样的代码中发现了一个潜在的问题:

float a, b, c;
int count = sscanf(data, "%f,%f,%f", &a, &b, &c);
Run Code Online (Sandbox Code Playgroud)

它说:"没有字段宽度限制的scanf可能会因大量数据而崩溃".怎么可能?这是某些sscanf实现中的已知错误吗?我知道数字可能会溢出(数字),但程序怎么会崩溃?这在cppcheck中是误报吗?

我发现了一个类似的问题:scanf Cppcheck警告,但答案并不完全令人满意.答案提到了类型安全,但这不应该是一个问题.

c++ cppcheck

11
推荐指数
1
解决办法
4486
查看次数

std :: is_function无法将模板参数识别为函数

我将函数指针传递给函数模板:

int f(int a) { return a+1; }

template<typename F>
void use(F f) {
    static_assert(std::is_function<F>::value, "Function required"); 
}

int main() {
    use(&f); // Plain f does not work either.
}
Run Code Online (Sandbox Code Playgroud)

但模板参数F不被识别is_function为函数,静态断言失败.编译器错误消息说,F就是int(*)(int)这是一个函数指针.为什么它表现得那样?在这种情况下,如何识别功能或指针?

c++ types c++11

11
推荐指数
1
解决办法
1193
查看次数

仅为从单个基础派生的类定义模板函数

我有一个基类Base,很多其他类将派生自.我想定义:

template<typename Derived>
ostream &operator<< (ostream &o, Derived &derived) {
}
Run Code Online (Sandbox Code Playgroud)

但仅适用于派生自的类Base.我需要以前定义的所有内容operator<<用于其他类型.怎么做?那可能吗?

我无法创建ostream &operator<< (ostream &o, Base &base),因为我需要在某些类型特征中使用的确切类型.有什么方法可以在将值作为基类型传递时"推送"派生类型?

c++ templates

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

传递可变参数模板参数的位置

我想创建一个带有可变数量模板参数的函数.稍后使用这些参数,函数应该像这样传递它们的位置:

template<typename R, typename Args...>
R myFunction(Data &data, void *function) {
    auto f = (R (*)(Args...))function;
    return f(read<Args1>(data, 1), read<Args2>(data, 2), ...);// <-- This is the problem
}
Run Code Online (Sandbox Code Playgroud)

给定的代码当然不可编译.有没有办法解决它?有没有一种方法可以做到没有可变参数模板而没有太多的代码重复?

c++ variadic-templates c++11

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

C++避免了const和非const访问的代码重复

我有一个类应该为每个成员变量调用一个访问者方法.像这样的东西:

class A{
    int a, b, c;

public:
    void accept(Visitor &visitor){
        visitor.visit(a);
        visitor.visit(b);
        visitor.visit(c);
    }
};
Run Code Online (Sandbox Code Playgroud)

如何void accept() const在没有代码重复的情况下使用相同的代码获取方法?

重复的显而易见的解决方案是添加一个方法:

void accept(Visitor &visitor) const {
    visitor.visit(a);
    visitor.visit(b);
    visitor.visit(c);
}
Run Code Online (Sandbox Code Playgroud)

该方法具有我想要的含义,但我想避免代码重复.拥有这两种方法的原因是能够通过"阅读"访问者读取变量并accept很好地使用该方法const.然后非const accept将可用于"写入/更新"访问者.

c++ const-correctness visitor-pattern

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

graphics.h的替代品

我们在大学本学期开设了计算机图形学入门课程.关于如何进行实验练习没有推荐的方法.大多数学生都使用Turbo C和内置的graphics.h头文件.

我对此有点担心,Turbo C是70年代的事情并且对它学习东西对我来说似乎毫无意义.我也可以为Bloodshed Dev-C++编译器设置graphics.h,也可以在linux系统上设置libgraph.

Borland graphics.h有一些替代品吗?我正在寻找相对简单的相对现代的解决方案,因为它们不会添加太多的样板代码等,而是实现相同的功能.

为了提供有关我们将要完成的任务的更多信息,我们将实现基本的图形算法,如DDA算法,Bresenham的算法,扫描转换等.所以我需要能够在屏幕上绘制像素,我不需要一个真正的高级库,它可以自己绘制线条和圆形等基元.如果它可以很好但是要学习我应该能够在屏幕上绘制原始像素.

c++ graphics turbo-c++

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

C++语义类型包装

我有一个数据类型,例如class Vector3.现在我需要创建几个具有相同接口的类Vector3,但具有更高级别的语义(例如:Position,Velocity).使用typedef是不够的,因为我需要这些类型是不同的,以便它们可以用于重载.在C++ 0x中我可能使用构造函数继承:

struct Position: public Vector3 {
    using Vector3::Vector3;
};
Run Code Online (Sandbox Code Playgroud)

这有什么问题吗?有没有更好的方法呢?是否可以在不使用C++ 0x功能的情况下执行此操作而不必显式编写所有Vector3构造函数?

c++ overloading

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

boost :: enable_if_c似乎不起作用

可能重复:
如何使用enable_if根据类的模板参数启用成员函数

我有一个类模板:

template<typename T, size_t N> class Vector
Run Code Online (Sandbox Code Playgroud)

我想启用具体的构造函数N,所以我这样做:

Vector(typename boost::enable_if_c<N==2, T>::type const &e0, T const &e1) {
    data[0] = e0;
    data[1] = e1;
}
Run Code Online (Sandbox Code Playgroud)

但编译器(MSVC 2010 SP1)给出了一个错误,而不是应用SFINAE.错误是:

error C2039: 'type' : is not a member of 'boost::enable_if_c<B,T>'
      with
      [
          B=false,
          T=float
      ]
Run Code Online (Sandbox Code Playgroud)

问题是什么?这是一个已知的问题吗?我该如何解决?它是唯一可以使用的解决方案static_assert吗?

编辑: GCC也没有成功:http://ideone.com/7Ejo8

c++ boost sfinae

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

一种线性时间算法,用于查找从其他顶点可见的多边形的任何顶点

假设有一个没有孔的多边形和由n顶点定义的自交叉(即简单的多边形).选择v此多边形的反射顶点.

我想找到u从顶点"可见"的同一多边形的任何其他顶点v.通过可见我的意思是,在v和之间的线段u完全位于多边形内部.

是否有算法可以O(N)及时或更好地完成?是否有算法可以及时找到所有可见顶点O(N)

一项快速研究表明,对于给定的多边形和该多边形内的任何点,可以构造可见性多边形O(N).我假设找到一个可见的顶点应该更容易.

algorithm geometry computational-geometry

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