小编pap*_*jam的帖子

Jekyll - 自动突出显示菜单栏中的当前选项卡

我正在使用github来托管一个静态站点和Jekyll来生成它.

我有一个菜单栏(as <ul>),并希望<li>为当前页面对应的CSS高亮分配不同的类.

所以像伪代码:

<li class={(hrefpage==currentpage)?"highlight":"nothighlight"} ...>

或者甚至可能<ul>在Jekyll中产生整体.

如何通过犯罪之外的最小变化来完成这项工作<ul>

jekyll

76
推荐指数
5
解决办法
3万
查看次数

C++预处理器:避免代码重复成员变量列表

我有一个多个类,每个类都有不同的成员变量,这些变量在构造函数中被简单地初始化.这是一个例子:

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)

c++ templates arguments c-preprocessor

60
推荐指数
2
解决办法
3万
查看次数

C++或库中是否存在null std :: ostream实现?

我正在寻找一个std::ostream类似的实现/dev/null.它会忽略流向它的任何内容.标准库或Boost中是否存在这样的事情?或者我必须自己动手?

c++ null ostream

50
推荐指数
5
解决办法
2万
查看次数

如何从C++容器中获取随机元素?

从STL范围获取[伪]随机元素的好方法是什么?

我能想到的最好的就是做std::random_shuffle(c.begin(), c.end()),然后从我的随机元素c.begin().

但是,我可能想要一个const容器中的随机元素,或者我可能不想要完全洗牌的成本.

有没有更好的办法?

c++ algorithm stl

48
推荐指数
4
解决办法
4万
查看次数

C++中unsigned和unsigned int之间的区别

unsigned和之间有什么区别unsigned int

这个问题已经回答了C(没有区别):

C中无符号和无符号int之间的区别

我很想知道C++中是否存在任何实际差异.它们是同一类型吗?

c++ int unsigned types

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

在C++字符串中转义XML/HTML的最有效方法?

我不敢相信以前没有问过这个问题.我有一个字符串需要插入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 = "&quot;"; break;   
        case '&':  replacement = "&amp;";  break;   
        case '<':  replacement = "&lt;";   break;   
        case '>':  replacement = "&gt;";   break;   
        default: ;
        }
        data->replace(pos, 1, replacement);
        pos += replacement.size();
    };
}
Run Code Online (Sandbox Code Playgroud)

c++ string algorithm stl

30
推荐指数
2
解决办法
3万
查看次数

是否有一个C++ type_info的可移植包装器,它标准化了类型名称字符串格式?

输出的格式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可能实现的那种东西,但我无法在任何地方找到它.是否有便携式库可以做到这一点?

c++ boost types typeid typeinfo

21
推荐指数
1
解决办法
1181
查看次数

快速输入Visual Studio调试的命令行参数?

我想更改我的命令行参数,然后调试我的可执行文件.

使用默认的Visual Studio UI,这会带来几个曲折的鼠标和键盘操作:

项目...右键单击...配置属性...调试...命令参数... 键入args ... ENTER ... F5

有没有办法让这个常见操作像其他常见操作一样简单,例如,搜索所有文件的模式:

CNTL + SHIFT + F ... 类型搜索模式 ... ENTER

例如,有没有办法创建自定义编辑框以允许快速访问调试命令行参数?或者让键绑定弹出一个简单的"调试对话框",可以输入args并直接调试?例如

ALT + F5 ... 键入args ... ENTER

我正在使用C++和Visual Studio 2010 Express.谢谢!

c++ debugging visual-studio-2010 visual-studio

20
推荐指数
3
解决办法
2万
查看次数

避免平铺SVG形状之间的界限

我使用多个不同颜色的矩形来构建SVG数据可视化.这很有效但有时背景颜色在矩形之间渗透.我正在浏览Chrome,但其他浏览器似乎也受到了类似的影响

http://jsfiddle.net/dVEPk/

<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>重叠"吗?

layout svg rendering

20
推荐指数
1
解决办法
2598
查看次数

C++模板覆盖const和非const方法

我有重复相同代码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)

c++ templates visitor

16
推荐指数
2
解决办法
9658
查看次数