我正在使用github来托管一个静态站点和Jekyll来生成它.
我有一个菜单栏(as <ul>),并希望<li>为当前页面对应的CSS高亮分配不同的类.
所以像伪代码:
<li class={(hrefpage==currentpage)?"highlight":"nothighlight"} ...>
或者甚至可能<ul>在Jekyll中产生整体.
如何通过犯罪之外的最小变化来完成这项工作<ul>?
我有一个多个类,每个类都有不同的成员变量,这些变量在构造函数中被简单地初始化.这是一个例子:
struct Person
{
Person(const char *name, int age)
:
name(name),
age(age)
{
}
private:
const char *name;
int age;
};
Run Code Online (Sandbox Code Playgroud)
每个都有一个相关的print<>()功能.
template <>
void print<Person>(const Person &person)
{
std::cout << "name=" << name << "\n";
std::cout << "age=" << age << "\n";
}
Run Code Online (Sandbox Code Playgroud)
由于参数列表在四个位置复制,因此该代码容易出错.如何重写代码以避免重复?我想使用预处理器和/或模板.
例如,我可以使用X-args预处理器技术 - 类似这样的东西吗?
#define ARGUMENTS \
ARG(const char *, name) \
ARG(int, age)
struct Person
{
Person(LIST_TYPE_NAME_COMMA(ARGUMENTS))
:
LIST_NAME_INIT(ARGUMENTS)
{
}
private:
LIST_TYPE_NAME_SEMICOLON(ARGUMENTS)
};
template <>
void print<Person>(const Person &person)
{
LIST_COUT_LINE(ARGUMENTS)
} …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个std::ostream类似的实现/dev/null.它会忽略流向它的任何内容.标准库或Boost中是否存在这样的事情?或者我必须自己动手?
从STL范围获取[伪]随机元素的好方法是什么?
我能想到的最好的就是做std::random_shuffle(c.begin(), c.end()),然后从我的随机元素c.begin().
但是,我可能想要一个const容器中的随机元素,或者我可能不想要完全洗牌的成本.
有没有更好的办法?
我不敢相信以前没有问过这个问题.我有一个字符串需要插入HTML文件,但它可能包含特殊的HTML字符.我想用适当的HTML表示替换它们.
下面的代码有效,但非常冗长和丑陋.性能对我的应用程序并不重要,但我想这里也存在可伸缩性问题.我怎样才能改善这个?我想这是STL算法或一些深奥的Boost函数的工作,但下面的代码是我能想出的最好的代码.
void escape(std::string *data)
{
std::string::size_type pos = 0;
for (;;)
{
pos = data->find_first_of("\"&<>", pos);
if (pos == std::string::npos) break;
std::string replacement;
switch ((*data)[pos])
{
case '\"': replacement = """; break;
case '&': replacement = "&"; break;
case '<': replacement = "<"; break;
case '>': replacement = ">"; break;
default: ;
}
data->replace(pos, 1, replacement);
pos += replacement.size();
};
}
Run Code Online (Sandbox Code Playgroud) 输出的格式type_info::name()是特定于实现的.
namespace N { struct A; }
const N::A *a;
typeid(a).name(); // returns e.g. "const struct N::A" but compiler-specific
Run Code Online (Sandbox Code Playgroud)
是否有人编写了一个包装器,它返回可靠,可预测的类型信息,这些信息在编译器中是相同的.多个模板化函数将允许用户获取有关类型的特定信息.所以我可以使用:
MyTypeInfo::name(a); // returns "const struct N::A *"
MyTypeInfo::base(a); // returns "A"
MyTypeInfo::pointer(a); // returns "*"
MyTypeInfo::nameSpace(a); // returns "N"
MyTypeInfo::cv(a); // returns "const"
Run Code Online (Sandbox Code Playgroud)
这些函数只是示例,对C++类型系统有更好了解的人可能会设计出更好的API.我感兴趣的那个base().如果禁用RTTI或检测到不支持的编译器,则所有函数都会引发异常.
这似乎是Boost可能实现的那种东西,但我无法在任何地方找到它.是否有便携式库可以做到这一点?
我想更改我的命令行参数,然后调试我的可执行文件.
使用默认的Visual Studio UI,这会带来几个曲折的鼠标和键盘操作:
项目...右键单击...配置属性...调试...命令参数... 键入args ... ENTER ... F5
有没有办法让这个常见操作像其他常见操作一样简单,例如,搜索所有文件的模式:
CNTL + SHIFT + F ... 类型搜索模式 ... ENTER
例如,有没有办法创建自定义编辑框以允许快速访问调试命令行参数?或者让键绑定弹出一个简单的"调试对话框",可以输入args并直接调试?例如
ALT + F5 ... 键入args ... ENTER
我正在使用C++和Visual Studio 2010 Express.谢谢!
我使用多个不同颜色的矩形来构建SVG数据可视化.这很有效但有时背景颜色在矩形之间渗透.我正在浏览Chrome,但其他浏览器似乎也受到了类似的影响
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect x="10.5" y="10" height="100" width="100"
style="stroke:none; fill: #00cc00"/>
<rect x="110.5" y="10" height="100" width="100"
style="stroke:none; fill: #00cc00"/>
</svg>
Run Code Online (Sandbox Code Playgroud)
在Chrome中,如果x offset是一个整数,则该行不可见.
我确信我可以通过使矩形比它们必须占据的空间大一点来避免线条.但这看起来像是一个黑客:是否有一个SVG成语或最佳实践来实现没有"灌浆"的完美平铺形状?
我也担心渲染性能,因为我的可视化可能非常大(例如100MB XML .svg).我希望能够给渲染器一些提示,例如"这里没有任何形状<g>重叠"吗?
我有重复相同代码const和非const版本的问题.我可以用一些代码来说明问题.这里有两个样本访问者,一个修改访问对象,另一个不访问.
struct VisitorRead
{
template <class T>
void operator()(T &t) { std::cin >> t; }
};
struct VisitorWrite
{
template <class T>
void operator()(const T &t) { std::cout << t << "\n"; }
};
Run Code Online (Sandbox Code Playgroud)
现在这里是一个聚合对象 - 这只有两个数据成员,但我的实际代码要复杂得多:
struct Aggregate
{
int i;
double d;
template <class Visitor>
void operator()(Visitor &v)
{
v(i);
v(d);
}
template <class Visitor>
void operator()(Visitor &v) const
{
v(i);
v(d);
}
};
Run Code Online (Sandbox Code Playgroud)
并且有一个函数来演示以上内容:
static void test()
{
Aggregate a;
a(VisitorRead());
const Aggregate …Run Code Online (Sandbox Code Playgroud)