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) 考虑一个简单的宏:
#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>作为两个单独的参数解释为宏.预处理器无法识别<>范围!
无论如何在宏中使用这样的模板?
这是一个相当长的镜头,因为我不确定它是否可能,但也许在模板元编程方面比我更有经验的人会启发我.
我正在编写一个使用模板的自动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的数量.
不规则的时间序列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。关键是要首先找到这些差距。
那么,执行此看似简单的操作的干净方法是什么?
我有一段代码(它是应用程序的一部分),我正在尝试使用OpenMP进行优化,我正在尝试各种调度策略.就我而言,我注意到该schedule(RUNTIME)子句优于其他子句(我没有指定chunk_size).我有两个问题:
当我没有指定chunk_size时,schedule(DYNAMIC)和之间有区别schedule(GUIDED)吗?
OpenMP如何确定存储在OMP_SCHEDULE变量中的默认特定于实现的调度?
我了解到如果没有指定调度方案,则默认schedule(STATIC)使用.因此,如果我不修改OMP_SCHEDULE变量,并schedule(RUNTIME)在我的程序中使用,调度方案是否schedule(STATIC)一直都是,或者OpenMP是否有一些智能的方法来动态设计调度策略并不时更改它?
我有一个需要使用某个闭源C++ API的应用程序.此API与一些Boost,二进制库文件和所有文件一起分发.我喜欢在我自己的代码中使用Boost.我不能只使用他们的Boost版本,因为他们没有分发我需要的Boost的所有部分.我该怎么办?目标平台是linux,最终也是Windows.
参考代码:
#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) 我正在寻找一个示例应用程序或更多架构讨论来构建一个应用程序,它维护一个本地持久存储(CoreData)并使其与Flickr之类的Web服务保持同步.在我的例子中,它是Salesforce,但模式应该类似于Flickr,Twitter,IMAP等许多应用程序.
示例问题:调用同步的最佳点在哪里?什么是经过验证的数据结构来维护本地更改 - 在每个未经同步的更改中维护本地存储中的"已更改"BOOL; 我希望在记录级别标志上使用字段级别标志)?
当然,我必须自己优化这一点,知道记录的数量(100)和变化(每天10次)和冲突的概率(在我的情况下在场地级别上很低).
我正在写一个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]",原因很明显.
我有两个目录,每个目录包含一个日期分区的splayed表.每个目录都有自己的sym文件.表格完全相同.
我想将它合并到一个目录中,但是我遇到了问题.最初我尝试在另一个目录中创建一个软链接(由于大量数据).这不起作用,因为表使用了错误的sym文件.
有谁知道如何最好地做到这一点?我是否必须为两个目录重新生成新的sym文件?
谢谢
c++ ×5
inheritance ×2
bash ×1
boost ×1
core-data ×1
data-science ×1
ios ×1
kdb ×1
linux ×1
macros ×1
name-hiding ×1
openmp ×1
overloading ×1
pandas ×1
python ×1
q-lang ×1
regex ×1
rename ×1
sed ×1
sync ×1
templates ×1
time-series ×1
vector ×1
web-services ×1