小编Sur*_*rya的帖子

cmake add_custom_command

我正在努力使用add_custom_command.让我详细解释一下这个问题.

我有这些cxx文件和hxx文件.我在每个脚本上运行一个perl脚本来生成某种翻译文件.该命令看起来像

perl trans.pl source.cxx -o source_cxx_tro
Run Code Online (Sandbox Code Playgroud)

同样对于header.hxx文件也是如此.

所以我最终会得到一些多个命令(每个命令用于一个文件)

然后我在这些命令生成的输出上运行另一个perl脚本(source_cxx_tro,header_hxx_tro)

perl combine.pl source_cxx_tro header_hxx_tro -o dir.trx
Run Code Online (Sandbox Code Playgroud)

dir.trx是输出文件.

我有这样的事情.

Loop_Over_All_Files()
Add_Custom_Command (OUTPUT ${trofile} COMMAND perl trans.pl ${file} -o ${file_tro})
List (APPEND trofiles ${file_tro})
End_Loop()

Add_Custom_Command (TARGET LibraryTarget POST_BUILD COMMAND perl combine.pl ${trofiles} -o LibraryTarget.trx)
Run Code Online (Sandbox Code Playgroud)

我期望在构建post构建目标时,首先构建trofiles.但事实并非如此.$ {trofiles}没有构建,因此post build命令以失败告终.有什么办法可以告诉POST_BUILD命令取决于以前的自定义命令吗?

有什么建议 ?

谢谢,苏里亚

cmake

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

派生类中的函数模板特化

我有一个带功能模板的基类.

我派生自基类,并尝试在派生类中对函数模板进行专门化

我做了这样的事.

class Base 
{
..
template <typename T>
fun (T arg) { ... }

};

class Derived : public Base
{
...
} ;

template <>
Derived::fun(int arg);
Run Code Online (Sandbox Code Playgroud)

在.cpp文件中,我提供了模板特化的实现.

这适用于MSVC 8.0和g ++ - 4.4.2抱怨Derived类中缺少函数声明乐趣.

我不知道哪个编译器的行为正确.非常感谢任何帮助.

谢谢,苏里亚

c++ inheritance templates

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

为命名空间中的类模板重载Output运算符

我有这个程序

#include <iostream>
#include <sstream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std ;

#if 0
namespace skg 
{
 template <class T>
  struct Triplet ;
}

template <class T>
ostream& operator<< (ostream& os, const skg::Triplet<T>& p_t) ;
#endif

namespace skg
{
 template <class T>
  struct Triplet
  {
 //  friend ostream& ::operator<< <> (ostream& os, const Triplet<T>& p_t) ;

   private:
   T x, y, z ;

   public:
   Triplet (const T& p_x, const T& p_y, const T& p_z)
    : x(p_x), y(p_y), z(p_z) …
Run Code Online (Sandbox Code Playgroud)

c++ templates outputstream operator-overloading friend

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

在命令行上评估emacs lisp表达式

我是emacs的新手.我在redhat linux上使用emacs-24.1,并试图评估一个elisp表达式.我想要emacs做的是评估elisp表达式而不启动emacs本身.我正在尝试不同的事情

emacs --eval '(+ 2 3)'
Run Code Online (Sandbox Code Playgroud)

我不知道emacs是否正在评估表达式,但结果未显示在控制台上,并且emacs窗口出现.接下来我尝试了这个

emacsclient --eval '(+ 2 3)'
Run Code Online (Sandbox Code Playgroud)

Emacs客户端期待服务器.它找不到服务器,因此抛出错误(无法找到socket.启动服务器等).所以我启动了一个服务器(服务器名称是SERVER)并再次运行emacsclient

emacsclient --server-file=SERVER -e '(+ 2 3)'
Run Code Online (Sandbox Code Playgroud)

这次,emacs评估表达式并在控制台上打印结果.这是因为emacs正在使用现有服务器来评估表达式.现在,当服务器未运行时,我遇到了问题.

emacsclient --server-file=ANOTHER_SERVER -e '(+ 2 3)' -a emacs
Run Code Online (Sandbox Code Playgroud)

这一次,我在控制台上没有收到任何错误.Emacs正在启动一个新窗口,因为-a(我的.emacs中有(server-start)命令,server-name设置为ANOTHER_SERVER).但emacs正在尝试编辑该文件(+ 2 3).它显示在模式行上.我糊涂了.emacsclient --help向我展示了这个

-e, --eval              Evaluate the FILE arguments as ELisp expressions
Run Code Online (Sandbox Code Playgroud)

和emacs手册说这个.

'-e'
'--eval'
Tell Emacs to evaluate some Emacs Lisp code, instead of visiting some files.
When this option is given, the arguments to emacsclient are interpreted as a
list of expressions to evaluate, not as a list …
Run Code Online (Sandbox Code Playgroud)

emacs elisp emacsclient

8
推荐指数
2
解决办法
4900
查看次数

Visual C++转储预处理器定义

我试图找出Visual C++编译器(MSVC)的所有预处理器定义.我可以

gcc -dM -E - < /dev/null
Run Code Online (Sandbox Code Playgroud)

在GCC上转储所有预处理器定义.我们有与Visual C++编译器编译器类似的东西吗?

我正在使用Visual C++ 9.0.

gcc visual-c++ c-preprocessor

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

使用Boost Spirit 2解析字符串,以填充用户定义的struct中的数据

我正在使用随着VS2005与Boost-1.42.0一起发布的Boost.Spirit.我的问题是这样的.

我有这个用逗号分隔的字符串.它的前3个字段是字符串,其余是数字.像这样.

String1,String2,String3,12.0,12.1,13.0,13.1,12.4
Run Code Online (Sandbox Code Playgroud)

我的规则是这样的

qi::rule<string::iterator, qi::skip_type> stringrule = *(char_ - ',')
qi::rule<string::iterator, qi::skip_type> myrule= repeat(3)[*(char_ - ',') >> ','] >> (double_ % ',') ;
Run Code Online (Sandbox Code Playgroud)

我正在尝试将数据存储在这样的结构中.

struct MyStruct
{
   vector<string> stringVector ;
   vector<double> doubleVector ;
} ;

MyStruct var ;
Run Code Online (Sandbox Code Playgroud)

我把它包装在BOOST_FUSION_ADAPT_STRUCTURE中以与精神一起使用它.

BOOST_FUSION_ADAPT_STRUCT (MyStruct, (vector<string>, stringVector) (vector<double>, doubleVector))
Run Code Online (Sandbox Code Playgroud)

我的解析函数解析该行并返回true和after

qi::phrase_parse (iterBegin, iterEnd, myrule, boost::spirit::ascii::space, var) ;
Run Code Online (Sandbox Code Playgroud)

我期待var.stringVector和var.doubleVector被正确填充.但事实并非如此.

出了什么问题?

代码示例位于此处

谢谢,苏里亚

c++ boost boost-spirit boost-spirit-qi

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

具有派生类的自定义容器的迭代器

我有一个自定义容器,它以两种不同的方式实现,但只有一个接口.这样的事情.

    class Vector 
    {
       virtual Iterator begin() = 0;
       virtual Iterator end () = 0 ;

    ... // some more functions.
    } ;

    class VectorImplA : public Vector
    {
       Iterator begin() { return m_data.begin() ; }
       Iterator end () { return m_data.end() ; }
    private:
       SomeFloatContainer m_data ;
    } ;

    class VectorImplB : public Vector
    {
       Iterator begin() { return m_data.end() ; }
       Iterator end() ; { return m_data.end() ; }


    private:
        std::vector <float> m_data ;

    } ;
Run Code Online (Sandbox Code Playgroud)

我需要的是Iterator的统一接口,以便我可以在基类中使用它.有任何想法吗 ?

c++ inheritance iterator

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