小编Olu*_*ide的帖子

在cmake命令行上指定include目录

是否可以在运行时指定包含目录cmake.例如

cmake . -INCLUDE=/foo/bar
Run Code Online (Sandbox Code Playgroud)

头文件与我想要编译的源代码位于一个单独的目录中,我想在不修改Makefile生成的情况下解决这个问题cmake.

更新

该项目确实有一个CMakeLists.txt.摘抄:

INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/ga)
INCLUDE_DIRECTORIES(${EO_SOURCE_DIR}/src/utils)
Run Code Online (Sandbox Code Playgroud)

可以${EO_SOURCE_DIR}从命令行设置吗?

cmake include command-line-arguments

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

升级程序选项中的互斥选项集

我的计划(prog.exe)支持以下四个标志:-P,-p,-b-s.然而:

  • -b并且-p必须一起指定,构成一个集合,并具有数值,例如-b 42
  • -s 不能用上面的集合指定,反之亦然
  • -P 两种情况都是强制性的

因此,prog.exe只能作为两者运行

prog.exe -P -s 
Run Code Online (Sandbox Code Playgroud)

要么

prog.exe -P -b -42 -p 8
Run Code Online (Sandbox Code Playgroud)

有没有办法在boost程序选项中指定上述互斥命令行选项集?

c++ command-line-arguments boost-program-options command-line-parsing

18
推荐指数
1
解决办法
4168
查看次数

在没有for循环的情况下,在C++ 98/03中以相反的顺序将C数组附加到向量

将C数组附加到向量(在C++ 98/03中)非常简单,如下所示:

std::vector<int> vec;
const int array[5] = { 1 , 2 , 3 , 4 , 5};

vec.insert( vec.end() , array , array + 5 );
Run Code Online (Sandbox Code Playgroud)

有没有办法在C++ 98/03中以相反的顺序将数组附加到向量而无需编写for循环.(这里看着你肖恩父母.)

c++ vector

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

实例化错误后的成员函数模板的专业化,以及成员函数的顺序

以下位代码无法在gcc 4.5.3上编译

struct Frobnigator
{
    template<typename T>
    void foo();

    template<typename T>
    void bar(); 
};

template<typename T>
void Frobnigator::bar()
{
}

template<typename T>
void Frobnigator::foo()
{
    bar<T>();
}

template<>      // error
void Frobnigator::foo<bool>()
{
    bar<bool>();
}

template<>
void Frobnigator::bar<bool>()
{
}

int main()
{
}
Run Code Online (Sandbox Code Playgroud)

错误讯息:specialization of ‘void Frobnigator::bar() [with T = bool]’ after instantiation.我终于解决了这个问题,因为Frobnigator::bar<bool>()之前出现了专门化Frobnigator::foo<bool>().显然,方法看起来很重要.

那么为什么以上是上面代码的lite版本,其中bar泛型版本之后出现的特化,有效吗?

struct Frobnigator
{
    template<typename T>
    void foo();
};

template<typename T>
void Frobnigator::bar()
{
}

template<>
void Frobnigator::bar<bool>() …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization

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

为什么SFINAE(enable_if)不适用于类模板的成员函数?

#include <type_traits>

struct A{};
struct B{};

template <typename T>
struct Foo
{
    typename std::enable_if<std::is_same<T, A>::value>::type
    bar()
    {}

    typename std::enable_if<std::is_same<T, B>::value>::type
    bar()
    {}
};
Run Code Online (Sandbox Code Playgroud)

错误信息:

14:5: error: 'typename std::enable_if<std::is_same<T, B>::value>::type Foo<T>::bar()' cannot be overloaded 10:5: 
error: with 'typename std::enable_if<std::is_same<T, A>::value>::type Foo<T>::bar()'
Run Code Online (Sandbox Code Playgroud)

来源cpp.sh.我以为两者typename std::enable_if<std::is_same<T,?>::value>::type在同一时间都无效.

编辑

对于后人来说,这是基于@ KerrekSB答案的编辑 - SFINAE仅适用于推导出的模板参数

#include <type_traits>

struct A{};
struct B{};

template<typename T>
struct Foo
{
    template<typename U = T>
    typename std::enable_if<std::is_same<U,A>::value>::type
    bar()
    {
    }

    template<typename U = T>
    typename std::enable_if<std::is_same<U,B>::value>::type
    bar()
    {
    } …
Run Code Online (Sandbox Code Playgroud)

c++ sfinae enable-if c++11

16
推荐指数
1
解决办法
5096
查看次数

typedef Foo <> Foo编译但是有效吗?

以下位代码在VS2008和GCC 4.8.2中编译

template<typename T=void>
struct Foo
{
};

// typedef Foo<> Foo;   // Does *NOT* compile

int main()
{
    typedef Foo<> Foo;
    Foo f1;

   // Foo<char> f2;     // Does *NOT* compile
   //::Foo<char> f3;    // COMPILES
}
Run Code Online (Sandbox Code Playgroud)

有效吗?

c++ templates typedef

14
推荐指数
2
解决办法
465
查看次数

能够使用指向函数的指针来调用外部类的私有方法

根据最近一个问题的以下答案,我可以使用函数指针从另一个类调用私有方法,如下所示(另请参见ideone)Foo<T>::foo()Bar

#include <iostream>

template<typename T>
struct Bar
{
    typedef void (T::*F)();

    Bar( T& t_ , F f ) : t( t_ ) , func( f )
    {
    }

    void operator()()
    {
        (t.*func)();
    }

    F func;
    T& t;
};

template<typename T>
class Foo
{
private:
    void foo()
    {
        std::cout << "Foo<T>::foo()" << std::endl;
    }

public:    
    Foo() : bar( *this , &Foo::foo ) 
    {
        bar();
    }

    Bar<Foo<T> > bar;
};

int main()
{
    Foo<int> …
Run Code Online (Sandbox Code Playgroud)

c++ member-function-pointers private

14
推荐指数
2
解决办法
6279
查看次数

为Python 2.7构建/安装C模块时出错

我正在尝试安装/编译ctools for python 时获取以下错误(版本信息)

ActivePython 2.7.2.5 (ActiveState Software Inc.) based on
Python 2.7.2 (default, Jun 24 2011, 12:22:14) [MSC v.1500 64 bit (AMD64)] on win32
Run Code Online (Sandbox Code Playgroud)
  • 操作系统:Windows 7 Professional 64位(Service Pack 1)
  • 已安装:Microsoft Visual C++ 2008 Express Edition

错误:

building 'deap.cTools' extension
Traceback (most recent call last):
  File "setup.py", line 40, in <module>
    cmdclass = {'build_py': build_py}
  File "C:\Python27\lib\distutils\core.py", line 152, in setup
    dist.run_commands()
  File "C:\Python27\lib\distutils\dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "C:\Python27\lib\distutils\dist.py", line 972, in run_command
    cmd_obj.run()
  File "C:\Python27\lib\distutils\command\install.py", …
Run Code Online (Sandbox Code Playgroud)

python visual-studio-2008

11
推荐指数
2
解决办法
3万
查看次数

用于在Windows 7中打开串行端口的命令

是否有用于打开串行端口的Windows命令,比如说COM3通过Windows 7中的命令提示符?例如:

OPEN "COM6" AS #1
Run Code Online (Sandbox Code Playgroud)

我不能使用pyserial或任何其他未与Windows 7一起分发的实用程序.

首选解决方案 在Windows 7上的QBasic中打开COM端口

windows cmd serial-port batch-file windows-7

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

编译器生成昂贵的MOVZX指令

我的探查器已将以下功能分析标识为热点.

typedef unsigned short ushort;

bool isInteriorTo( const std::vector<ushort>& point , const ushort* coord , const ushort dim )
{
    for( unsigned i = 0; i < dim; ++i )
    {
        if( point[i + 1] >= coord[i] ) return false;
    }

    return true;  
}
Run Code Online (Sandbox Code Playgroud)

特别是一个汇编指令MOVZX(Move with Zero-Extend)负责运行时的大部分.if语句被编译成

mov     rcx, QWORD PTR [rdi]
lea     r8d, [rax+1]
add     rsi, 2
movzx   r9d, WORD PTR [rsi-2]
mov     rax, r8
cmp     WORD PTR [rcx+r8*2], r9w
jae     .L5
Run Code Online (Sandbox Code Playgroud)

我想哄骗编译器生成这条指令,但我想我首先需要理解为什么生成这条指令.为什么扩展/零扩展,考虑到我使用相同的数据类型?

(在godbolt编译器资源管理器 …

c++ optimization assembly profiling

7
推荐指数
2
解决办法
2743
查看次数