小编chr*_*ock的帖子

重载超类的功能

C++标准中有什么东西阻止我重载超类的功能吗?

从这对课开始:

class A {            // super class
    int x;

public:
    void foo (int y) {x = y;}  // original definition
};

class B : public A { // derived class
    int x2;

public:
    void foo (int y, int z) {x2 = y + z;}  // overloaded
};
Run Code Online (Sandbox Code Playgroud)

我可以B::foo()轻松打电话:

    B b;
    b.foo (1, 2);  // [1]
Run Code Online (Sandbox Code Playgroud)

但如果我试着打电话A::foo()......

    B b;
    b.foo (12);    // [2]
Run Code Online (Sandbox Code Playgroud)

...我收到编译器错误:

test.cpp: In function 'void bar()':
test.cpp:18: error: no matching function for call …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance overloading name-hiding

9
推荐指数
1
解决办法
4258
查看次数

在没有括号的宏中使用逗号:如何与模板混合和匹配?

考虑一个简单的宏:

#define ECHO(x) x

ECHO(foo(1, 2))
Run Code Online (Sandbox Code Playgroud)

这会产生我们期望的确切输出:

foo(1, 2)
Run Code Online (Sandbox Code Playgroud)

上面的示例有效,因为预处理器可以识别与函数调用相邻的括号.

现在考虑如果我使用模板而不是函数调用会发生什么:

ECHO(template<int, bool>)
Run Code Online (Sandbox Code Playgroud)

这会导致错误,因为预处理器会将宏template<int和bool>作为两个单独的参数解释为宏.预处理器无法识别<>范围!

无论如何在宏中使用这样的模板?

c++ macros

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

使用c ++中的模板元编程从函数类型中提取调用约定

这是一个相当长的镜头,因为我不确定它是否可能,但也许在模板元编程方面比我更有经验的人会启发我.

我正在编写一个使用模板的自动lua函数绑定系统,使用部分特化提取函数类型:

template<typename T, T FUNCTION> class Function_c;
template<typename R, R (*FUNCTION)()> class Function_c<R (*)(), FUNCTION>; //specialized version
Run Code Online (Sandbox Code Playgroud)

问题是,这并没有告诉我函数调用约定,因此(在VS2012 32位中)它不会为__stdcall编译,并且它将与__fastcall一起崩溃.我可以创建另一个专门的版本来处理特定的调用约定,例如:

template<typename R, R (__stdcall *FUNCTION)()> class Function_c<R (__stdcall *)(), FUNCTION>;
Run Code Online (Sandbox Code Playgroud)

但是排列的数量开始失控:2(全局和成员函数)乘以最大参数数乘以调用约定数.

所以我想知道是否有任何方法可以将调用约定作为模板参数(可能不是,因为它不是真正的类型)来减少copypasting的数量.

c++ templates

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

差异pandas.DateTimeIndex没有频率

不规则的时间序列data存储在中pandas.DataFrame。DatetimeIndex已设置A。我需要索引中连续条目之间的时间差。

我以为会很简单

data.index.diff()
Run Code Online (Sandbox Code Playgroud)

但是得到了

AttributeError: 'DatetimeIndex' object has no attribute 'diff'
Run Code Online (Sandbox Code Playgroud)

我试过了

data.index - data.index.shift(1)
Run Code Online (Sandbox Code Playgroud)

但是得到了

ValueError: Cannot shift with no freq
Run Code Online (Sandbox Code Playgroud)

在执行此操作之前,我不想先推断或强制执行频率。时间序列中有很大的缺口,将会扩大到大量的时间nan。关键是要首先找到这些差距。

那么,执行此看似简单的操作的干净方法是什么?

python time-series pandas data-science

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

OpenMP中的Schedule子句

我有一段代码(它是应用程序的一部分),我正在尝试使用OpenMP进行优化,我正在尝试各种调度策略.就我而言,我注意到该schedule(RUNTIME)子句优于其他子句(我没有指定chunk_size).我有两个问题:

  1. 当我没有指定chunk_size时,schedule(DYNAMIC)和之间有区别schedule(GUIDED)吗?

  2. OpenMP如何确定存储在OMP_SCHEDULE变量中的默认特定于实现的调度?

我了解到如果没有指定调度方案,则默认schedule(STATIC)使用.因此,如果我不修改OMP_SCHEDULE变量,并schedule(RUNTIME)在我的程序中使用,调度方案是否schedule(STATIC)一直都是,或者OpenMP是否有一些智能的方法来动态设计调度策略并不时更改它?

openmp

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

使用闭源库分发boost

我有一个需要使用某个闭源C++ API的应用程序.此API与一些Boost,二进制库文件和所有文件一起分发.我喜欢在我自己的代码中使用Boost.我不能只使用他们的Boost版本,因为他们没有分发我需要的Boost的所有部分.我该怎么办?目标平台是linux,最终也是Windows.

  • 我不会跨API边界传递Boost对象.
  • 我可以将事物编译为目标文件,以便我的代码使用我的 boost标头,API的代码使用其 Boost标头.这部分看起来很简单.
  • 我没有得到:如何将 我的代码链接到我的 Boost库文件,以及API的代码链接到其 Boost库文件.我是否需要围绕API编译自己的包装器 - 一个包头,其头部不包括Boost - 到动态库?(这是我能想到的唯一方法来进行链接.API的Boost库文件中的符号应该与我的Boost库文件中的符号相同.我必须分两个阶段进行链接,不是吗?唯一的方法我可以链接一个程序,而不是通过制作动态库,不是吗?)

c++ boost multiple-versions

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

带继承的c ++向量

参考代码:

#include <vector>
#include <iostream>

class Func {
public:
    virtual void call() {
        std::cout<< "Func -> call()" << std::endl;
    }
};

class Foo : public Func {
public:
    void call() {
        std::cout<< "Foo -> call()" << std::endl;
    }
};

class Bar : public Func {
public:
    void call() {
        std::cout<< "Bar -> call()" << std::endl;
    }
};

int main(int argc, char** argv) {
    std::vector<Func> functors;

    functors.push_back( Func() );
    functors.push_back( Foo() );
    functors.push_back( Bar() );

    std::vector<Func>::iterator iter;
    for (iter = functors.begin(); …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance vector

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

iOS应用程序 - 用于将CoreData与Web服务同步的体系结构/示例

我正在寻找一个示例应用程序或更多架构讨论来构建一个应用程序,它维护一个本地持久存储(CoreData)并使其与Flickr之类的Web服务保持同步.在我的例子中,它是Salesforce,但模式应该类似于Flickr,Twitter,IMAP等许多应用程序.

示例问题:调用同步的最佳点在哪里?什么是经过验证的数据结构来维护本地更改 - 在每个未经同步的更改中维护本地存储中的"已更改"BOOL; 我希望在记录级别标志上使用字段级别标志)?

当然,我必须自己优化这一点,知道记录的数量(100)和变化(每天10次)和冲突的概率(在我的情况下在场地级别上很低).

web-services sync core-data iphonecoredatarecipes ios

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

Linux重命名命令大写第一个字母

我正在写一个Bash脚本来清理我的音乐.

我希望它格式化所有文件名并制作它们,所以通过一点互联网搜索,我写了这一行:

sed -i -e 's/[-_]/ /g' -e 's/ \+/ /g' -e **'s/\<[a-z]/\U&/g'** -e "s/$artist //g" -e "s/$album //g"
Run Code Online (Sandbox Code Playgroud)

我曾经将文件名添加到文本文件然后sed它,但后来我不知道如何将新名称应用于文件.

然后我开始尝试重命名并设法获得完全相同的结果,除了粗体部分,它应该使单词中的每个第一个字母大写.

rename 's/[-_]/ /g' * && rename 's/\s+/ /g' * && **rename 's/\s\w{1}/*A-Z*/g' *** && rename 's/^\d+[[:punct:]]\s//g' * && rename "s/$artist\s//g" * && rename "s/$album\s//g" * && rename "s/($ext)//g" *
Run Code Online (Sandbox Code Playgroud)

现在,重命名代码正在工作(至少令人满意),在SPACE字符后只找到一个字母,但这是有问题的替代品.我已经尝试了许多不同的方法,所有这些都让我得到的结果是,在这种情况下,焦点的第一个字母被完全交换到AZ.

在重命名手册页中,它表示使用小写大写,你可以使用/ az/AZ/g',但很容易看出它只在找到az AZ时才适用.所以这就是我需要帮助的地方.

如果有人知道如何在sed示例中执行此操作,那么\ <匹配每个单词的开头,因为此时,我的重命名命令将不适用于第一个单词,也不适用如果有多个光盘看起来像"光盘名称[光盘1]",原因很明显.

regex linux bash rename sed

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

合并splayed表的sym文件

我有两个目录,每个目录包含一个日期分区的splayed表.每个目录都有自己的sym文件.表格完全相同.

我想将它合并到一个目录中,但是我遇到了问题.最初我尝试在另一个目录中创建一个软链接(由于大量数据).这不起作用,因为表使用了错误的sym文件.

有谁知道如何最好地做到这一点?我是否必须为两个目录重新生成新的sym文件?

谢谢

kdb q-lang

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