我正在寻找一个良好的屏幕POD阅读体验.
多年来,我一直使用perldoc
或man
运行在xterm
屏幕上阅读Perl文档,并打造一个小型自定义程序Pod::LaTeX
来打印它.印刷版很好:脚本做得很好.但是,屏幕阅读很痛苦:
as
部分DBIx::Class::ResultSet
.Less对文档的结构一无所知,搜索常见的英文单词毫无意义.see section so-and-so
.大.现在我必须找到它.然后回到我原来的地方将不会是微不足道的(虽然这可能是我不那么无知的表现)!perldoc foo
有效,但两个文件之间的切换很难.你可以通过暂停较少并perldoc
从shell 运行来解决这个问题,但这是更多的击键而且我很懒.我希望能够单击目录,然后转到该部分.我希望能够点击"看到其他"然后去那里.等等.到目前为止,我知道两种可能性:
DBIx::Class::ResultSet
.需要Internet连接,但这通常不是问题.Podbrowser
.刚开始尝试这个,看起来很不错.我正在运行Debian GNU/Linux,Lenny和Squeeze.但请为所有平台建议程序,以使其尽可能有用.
C++ 11让我们可以在联合中使用非POD类型,比如说我有以下代码;
union
{
T one;
V two;
} uny;
Run Code Online (Sandbox Code Playgroud)
在我班级的某个地方,一次只有一名成员活跃,现在我的问题相当简单.
是否有可能与POD进驻?它似乎在Visual Studio 2012中不起作用:
struct X
{
int a;
int b;
};
void whatever()
{
std::vector<X> xs;
X x = {1, 2};
// okay
xs.push_back(x);
// okay
xs.emplace_back(x);
//error C2661: 'X::X': error C2661: no overloaded function takes 2 arguments
xs.emplace_back(1, 2);
}
Run Code Online (Sandbox Code Playgroud)
这只是Visual Studio 2012的一个缺点,还是放置POD根本无法在C++ 11中运行?
#include <iostream>
#include <type_traits>
struct base_pod_t {
unsigned x;
};
struct der_pod_t : public base_pod_t { };
int main()
{
std::cout << "base_pod_t is POD: " << std::is_pod<base_pod_t>::value << std::endl;
std::cout << "der_pod_t is POD: " << std::is_pod<der_pod_t>::value << std::endl;
base_pod_t b1 = {}; // OK
base_pod_t b2 = {3}; // OK
der_pod_t p1 = {}; // OK
// der_pod_t p2 = {4}; // ERROR!
}
Run Code Online (Sandbox Code Playgroud)
最后一行导致错误.如何der_pod_t
用值来初始化?
似乎即使它是一个POD它试图使用构造函数?
编辑:
由于@Praetorian和@dyb建议它是POD因此结果std::is_pod<der_pod_t>::value
是正确的.
实际上我正在考虑简单的可破坏的对象,不仅仅是关于POD(我不确定POD可以有基类).
当我从cppreference中读到is_trivially_destructible的这个解释时,我注意到这一点:
由简单可破坏的对象占用的存储可以在不调用析构函数的情况下重用.
所以,这样做是安全的:
struct A {
int a;
};
struct B : A {
int b;
};
int main() {
A* a = new B;
delete a;
}
Run Code Online (Sandbox Code Playgroud)
B::~B()
将不会被调用 - 和AFAIK(如果我错了请更正)整个内存将被释放.而且B::~B()
肯定是微不足道的.
我知道这段代码闻起来很糟糕,但我的问题只是关于这段代码的安全性......
Pod有一个易于使用的"你看到的是什么"的编辑器?
我不习惯Pod的语法,所以可以选择编写Pod,并立即看到输出看起来会有什么帮助.理想情况下,这个编辑器会有一些"代码完成"来帮助正确的语法.
有这样的编辑吗?
这个结构是C++ 11中的POD吗?
struct B
{
int a;
B(int aa) : a(aa) {}
B() = default;
};
Run Code Online (Sandbox Code Playgroud)
请注意,这个问题是关于C++ 11的明确问题.我知道这个类不是C++ 98中的POD,也不是C++ 03.
有关C++ 11中POD的解释,请参阅普通与标准布局与POD
(受此问题的启发:是否有编译时func /宏来确定C++ 0x结构是否为POD?)
我确实知道is_pod
一个类型的充分条件是memcpy
可行的,但has_trivial_destructor
也足够用于此目的?如果没有,为什么?
我g++ -std=c++0x pod_test.cpp
在g ++ 4.6.2(mingw)上运行了下面的内容.我在A4上收到错误.为什么不是A4 POD?
#include <iostream>
#include <new>
#include <cstring>
using namespace std;
struct A {
int a, b;
char c;
};
struct A2 {
short buf[1];
};
struct A3:A {
};
struct A4:A {
short buf[1];
};
static_assert(std::is_pod<A>::value, "Struct must be a POD type");
static_assert(std::is_pod<A2>::value, "Struct must be a POD type");
static_assert(std::is_pod<A3>::value, "Struct must be a POD type");
static_assert(std::is_pod<A4>::value, "Struct must be a POD type");
int main(){}
Run Code Online (Sandbox Code Playgroud)