我正在尝试将一些代码从旧命名方案迁移到旧命名方案的新代码:
int some_var_name;
Run Code Online (Sandbox Code Playgroud)
新的是
int someVarName_:
Run Code Online (Sandbox Code Playgroud)
所以我想要的是某种形式的sed/regexy善良来简化这个过程.所以基本上需要发生的是:
找到包含_的小写单词_替换下划线没有任何东西,并将_的右侧的字符串提升为大写.在此之后将_追加到比赛结束.
用Sed和/或Awk和正则表达式可以做到这一点吗?如果不是为什么不呢?
任何示例脚本将不胜感激.
非常感谢任何帮助.
编辑:
为了清楚起见,重命名是针对许多使用错误的命名约定编写的文件,需要与代码库的其余部分保持一致.预计这不是一个完美的替代,使一切处于可编辑的状态.相反,脚本将被运行,然后手动查看任何异常.替换脚本纯粹是为了减轻手动纠正所有内容的负担,我相信你会同意这是相当繁琐的.
当你把一个班级的成员函数变成自己的朋友时会发生什么?
下面的代码编译并运行.如果没有friend声明,就会生成"运算符的参数太多"(这是正确的).我意识到这样做没有任何意义,但任何人都可以告诉我这里发生了什么?朋友是否强制编译器以某种方式省略默认的this参数?
class Test
{
public:
friend bool operator<(Test& lhs, Test& rhs)
{
return true;
}
};
int main( int c, char** argv)
{
Test test1;
Test test2;
return test1 < test2;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Boost.Python在我的C++可执行文件中嵌入一个解释器并执行一些预先编写的脚本.我有它的工作,所以我可以调用python文件中的函数,但我想使用的python代码导入外部文件,这些导入失败,因为'没有名为'的模块.如果我直接从python运行脚本,一切都按预期工作.
所以我的问题是在通过C++绑定运行的python脚本中导入模块的正确方法是什么?
C++代码:
#include "boost/python.hpp"
int main(int argc, char** argv)
{
try
{
Py_Initialize();
boost::python::object test = boost::python::import("__main__");
boost::python::object testDict = test.attr("__dict__");
boost::python::exec_file("test.py", testDict, testDict);
}
catch(boost::python::error_already_set& e)
{
PyErr_Print();
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Python代码:
import ModuleX
Run Code Online (Sandbox Code Playgroud) 在尝试使用Boost.Graph时遇到了一些野蛮的编译错误.该错误是回归,因为在编译1.55.0时它不存在.我挖了一下但是无法解决它,有谁知道这里出了什么问题?
注意:使用-std = c ++ 0x编译标志
将生成错误的代码.
#include "boost/graph/adjacency_list.hpp"
int main(int argc, char** argv)
{
using boost::adjacency_list;
using boost::vecS;
using boost::directedS;
typedef adjacency_list<vecS, vecS, directedS, boost::default_color_type> Graph;
std::vector< std::pair<int, int> > testVec;
auto graph = Graph( begin(testVec), end(testVec), testVec.size());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
从我的IDE复制的错误
/usr/include/c++/4.6/bits/vector.tcc:319:错误:使用已删除的函数'boost :: detail :: stored_edge_property :: self&boost :: detail :: stored_edge_property :: operator =(boost :: detail :: stored_edge_property :: self &&)[with Vertex = long unsigned int,Property = boost :: no_property,boost :: detail :: stored_edge_property :: self = …
我在下面的HTML中遇到问题:
<html>
<body>
<p style="font-size: large">
Some paragraph text
<span><pre style="display:inline">some span text</pre></span>
additional paragraph text that continues ...
</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
所以这只是一个段落,其中包含一些预先格式化的文本.我遇到的问题是Opera和Chrome都没有像我期望的那样显示.具体来说,他们在跨度之前关闭段落标记并强制换行.WTH?
使用chromes HTML检查选项,它显示<p>标签正在关闭,空<span></span>插入而不是封闭<pre>.如果删除范围,Chrome仍然会关闭<p>标记,强制换行.
我需要显示以下标记结构,而不强制使用任何换行符<p><span><pre><code></code></pre></span></p>.这是完全可能还是有其他选择或解决方法?
编辑:我已经锁定了<pre>标签,因为它是wordpress语法高亮插件的一部分.
注意:我认为这里最好的建议是验证您的HTML.我遇到的很多问题是因为某些浏览器正在优雅地处理无效的HTML而其他浏览器并不优雅.验证意味着您可以使用干净的平板.
我遇到的问题非常简单(或者看起来似乎如此).我想要做的就是用另一个段落替换一段文本(它是标题注释).这需要在目录层次结构(源代码树)中的各种文件中进行.
要替换的段落必须完全匹配,因为存在类似的文本块.
例如
取代
// ----------
// header
// comment
// to be replaced
// ----------
Run Code Online (Sandbox Code Playgroud)
同
// **********
// some replacement
// text
// that could have any
// format
// **********
Run Code Online (Sandbox Code Playgroud)
我已经看过使用sed,从我可以告诉它可以处理的最多行数是2(使用N命令).
我的问题是:从linux命令行执行此操作的方法是什么?
编辑:
获得的解决方案:最佳解决方案是Ikegami的完全命令行,最适合我想做的事情.
我的最终解决方案需要一些调整; 输入数据包含许多特殊字符,替换数据也是如此.为了解决这个问题,需要对数据进行预处理以插入适当的\n和转义字符.最终产品是一个带有3个参数的shell脚本; 包含要搜索的文本的文件,包含要替换的文本的文件和用于递归解析具有.cc和.h扩展名的文件的文件夹.从这里定制起来相当容易.
脚本:
#!/bin/bash
if [ -z $1 ]; then
echo 'First parameter is a path to a file that contains the excerpt to be replaced, this must be supplied'
exit 1
fi
if [ -z $2 ]; then
echo 'Second parameter …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用源特定多播 (SSM) 为 Linux 上的应用程序设置多播源,代码运行正常(使用 C 接口),但我想验证系统是否会按照我的预期运行。
设置:
多播地址 - 233.XXX:9876
源 1 - 192.XX1
源 2 - 192.XX2
接口 1 - 192.XX100
接口 1 - 192.XX101
脚步
期望的结果:
Reader1 可以看到来自多播的数据。
Reader2 看不到来自多播的数据。
我担心上述情况不会出现,因为在我使用非源特定多播的测试中,IP_ADD_MEMBERSHIP 具有全局效果。因此 reader2 的套接字可以看到数据,因为它绑定到已加入到查看数据的接口的唯一多播地址。“加入多播”下的此链接中的信息与我的观察相符。
IP_ADD_SOURCE_MEMBERSHIP 的行为很可能与 IP_ADD_MEMBERSHIP 不同,但文档很少且在这方面不具体。
具体问题:
我对网络编程缺乏经验,所以请原谅我理解上的任何缺陷。
感谢您的任何帮助。
可能重复:
合并:hg/git与svn
嗨,
我是SVN的长期用户,并且在一般的mercurial和分散版本控制系统方面已经听到了很多关于我的事情.我所知道的主要功能是Mercurial中的合并更容易,因为它记录了每个合并的信息,因此每个连续的合并都知道以前的合并.
现在正如红皮书中所述,在与合并有关的部分中,SVN已经通过mergeinfo支持了这一点.现在我还没有真正使用过这个功能(虽然我想,我们的repo版本不够新)但是这个SVN功能与Mercurial提供的特别不同吗?
对于那些不知道svn中历史合并的建议工作流程的人是这样的:
从开发主干分支做自己的事情.
定期将更改从主干合并到您的分支以保持最新.
完成mergeinfo后合并以平滑过程.
没有历史数据合并这是一场噩梦,因为比较严格依赖于文件中的差异,并没有考虑到路上采取的步骤.因此,当您合并回来时,开发主干中的每个更改都会使您进一步陷入冲突.
现在我想知道的是:
与SVN中的mergeinfo相比,使用Mercurial合并是否提供了显着的优势,或者这只是一些关于什么的热点?
有没有人在SVN中使用了mergeinfo功能,实际上它有多好?
我有一个相当简单的bash shell脚本问题.
我想要sed一段文本,然后将结果分配给sed变量.
#!/bin/bash
MOD_DATE=echo $(date) | sed 's/\ /_/g'
echo $MOD_DATE // should show date with spaces replaced with underscores.
Run Code Online (Sandbox Code Playgroud)
我已经尝试过以上内容但它不起作用.谁能指出我做错了什么?
我刚刚boost::bind和我一起工作boost::function并注意到以下行为(我认为这有点奇怪).你可以使用boost :: function类型所需的参数来绑定一个函数!看起来似乎只是忽略了任何其他参数而只是消失了.
那么为什么这种行为是正确的?我的期望是应该提出一个编译错误,说明不兼容.
请参阅下面有关显示问题的工作代码示例
#include "boost/bind.hpp"
#include "boost/function.hpp"
namespace
{
int binder(const char& testChar,
const int& testInt,
const std::string& testString)
{
return 3;
}
}
int main(int c, char** argv)
{
boost::function<int(const char&,
const int&,
const std::string&,
const float&,
const std::string&,
const int&)> test;
test = boost::bind(&::binder, _1, _2, _3);
std::cout << test('c', 1, "something", 1.f, "more", 10) << std::endl;
}
Run Code Online (Sandbox Code Playgroud) 对于Vim来说,我是一个初学者,它目前在很多方面让我感到恼火.其中之一是:
假设我在文件中有以下文本
one
two
three
four
dog
frog
log
mog
Run Code Online (Sandbox Code Playgroud)
并且我使用视觉模式选择数字(4行)如果我然后使用P粘贴在狗的'd'我得到以下内容:
one
two
three
four
one dog
two frog
threelog
four mog
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
one
two
three
four
one
two
three
four
dog
frog
log
mog
Run Code Online (Sandbox Code Playgroud)
我注意到它表现得像我期望的那样,如果我做y4y而不是直观地选择线条.那么是什么导致了我所看到的行为上的差异?如何根据需要将我的视觉选择块粘贴?
目前我正在尝试读取格式化的时间字符串并从中创建持续时间.我目前正在尝试使用boost date_time time_duration类来读取和存储该值.
boost date_time提供了一种方法time_duration duration_from_string(std::string),允许从时间字符串创建time_duration,并接受适当格式化的字符串("[-]h[h][:mm][:ss][.fff]".).
现在,如果使用格式正确的时间字符串,此方法可以正常工作 但是,如果您提交的内容无效,例如"ham_sandwich"或"100",那么您将返回无效的time_duration.特别是如果您尝试将其传递给标准输出流,则会发生断言.
我的问题是:有谁知道如何测试boost time_duration的有效性?如果没有,你能建议另一种读取时间段并从中获取持续时间的方法吗?
注意:我尝试过time_duration提供的明显的测试方法; is_not_a_date_time(),is_special()等他们不接,有一个问题.
使用boost 1.38.0
我想在TypeScript中创建一个函数,该函数接受构造函数的数组并返回相应的实例数组。请参见下面的代码。
请注意,该getArray方法非常不正确,仅是传达我的意图的一种尝试。
这可能是任何形式还是超出TypeScript的类型引擎的能力?
class T1 {}
class T2 {}
class T3 {}
type AnyCon = new() => any;
function getOne<T_Con extends AnyCon>(con: T_Con): InstanceType<T_Con> {
return new con();
}
function getArray<T_Cons>(cons: T_Cons): InstanceType<T_Cons>[] {
return cons.map( (c: con) => new con() );
}
let t1: T1 = getOne(T1);
let [t2, t3]: [T2, T3] = getArray( [T2, T3] );
Run Code Online (Sandbox Code Playgroud) c++ ×7
boost ×4
sed ×3
linux ×2
awk ×1
bash ×1
bind ×1
boost-python ×1
c ×1
c++11 ×1
css ×1
datetime ×1
friend ×1
function ×1
gcc ×1
generics ×1
html ×1
import ×1
javascript ×1
mercurial ×1
merge ×1
multicast ×1
networking ×1
opera ×1
paste ×1
perl ×1
python ×1
regex ×1
replace ×1
shell ×1
sockets ×1
svn ×1
typescript ×1
vim ×1
workflow ×1