我正在尝试写入Nth POSITION的档案.我试过下面的例子,但最后写了.请帮助实现这一目标.
#!/usr/bin/perl
open(FILE,"+>>try.txt")
or
die ("Cant open file try.txt");
$POS=5;
seek(FILE,$POS,0);
print FILE "CP1";
Run Code Online (Sandbox Code Playgroud) 我已经编写了一个用于在C++中创建动态结构的类的基础知识.动态结构成员与(在我的测试中指示)连续存储编译器将在等效静态结构中插入的相同填充.因此,动态结构可以隐式转换为静态结构,以便与现有API互操作.
最重要的是,我不相信自己能够编写可以在或多或少任何平台上编译和工作的Boost质量代码.这段代码的哪些部分是危险的需要修改?
我还有一个与设计相关的问题:模板化get
访问器是为编译器提供类型安全代码所需的静态类型信息的唯一方法吗?实际上,用户dynamic_struct
必须在访问时指定他们正在访问的成员的类型.如果该类型应该更改,则所有访问都将变为无效,并且会导致严重的崩溃 - 或者更糟糕的是,无声地失败.并且它无法在编译时捕获.这是一个巨大的风险,我想补救一个.
用法示例:
struct Test {
char a, b, c;
int i;
Foo object;
};
void bar(const Test&);
int main(int argc, char** argv) {
dynamic_struct<std::string> ds(sizeof(Test));
ds.append<char>("a") = 'A';
ds.append<char>("b") = '2';
ds.append<char>("c") = 'D';
ds.append<int>("i") = 123;
ds.append<Foo>("object");
bar(ds);
}
Run Code Online (Sandbox Code Playgroud)
代码如下:
//
// dynamic_struct.h
//
// Much omitted for brevity.
//
/**
* For any type, determines the alignment imposed by the compiler.
*/
template<class T>
class alignment_of …
Run Code Online (Sandbox Code Playgroud) 假设我有一个类型列表[*]
:
let Ts = '[Int, Bool, Char]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为元组链:
type family Tupled (ts :: [*]) z :: *
type instance Tupled (t ': ts) z = (t, Tupled ts z)
type instance Tupled '[] z = z
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好:
> :kind! Tupled Ts ()
Tupled Ts () :: *
= (Int, (Bool, (Char, ())))
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够编写一个类型Fun
来表示在该链的"底部"具有多态性的函数.例如,Fun Ts Ts
应该适用于以下任何一种类型:
(Int, (Bool, (Char, (String, ()))))
(Int, (Bool, (Char, (Word, (ByteString, ())))))
Run Code Online (Sandbox Code Playgroud)
我试过这个:
newtype Fun as bs = Fun
{ …
Run Code Online (Sandbox Code Playgroud) 编辑:
所以这个问题被误解为这样一个荒谬的程度,它已经没有意义了.我不知道怎么回事,因为我实际问过的问题是我是否具体实现了这个 - 是的,已知是无意义的,是的,不是非常类似于惯用的C++ - 宏,它是否尽可能好,以及它是否必然不得不使用auto
,或者如果有合适的解决方法.它不应该产生这么多的关注,当然不是对这种程度的误解.要求受访者编辑他们的答案是毫无意义的,我不希望任何人因此而失去声誉,并且在这里有一些好的信息可供潜在的未来观众使用,所以我将随意挑选一个较低的选民答案是均匀分配所涉及的声誉.继续前进,没有什么可看的.
我看到了这个问题,并认为with
用C++ 编写语句可能很有趣.该auto
关键字使这很容易,但有一个更好的方式来做到这一点,或许不使用auto
?为简洁起见,我省略了一些代码.
template<class T>
struct with_helper {
with_helper(T& v) : value(v), alive(true) {}
T* operator->() { return &value; }
T& operator*() { return value; }
T& value;
bool alive;
};
template<class T> struct with_helper<const T> { ... };
template<class T> with_helper<T> make_with_helper(T& value) { ... }
template<class T> with_helper<const T> make_with_helper(const T& value) { ... }
#define with(value) …
Run Code Online (Sandbox Code Playgroud) 假设我想生成一个进程并运行execv
以执行命令,就像ls
这样我就是这样做的:
char * const parm[] = { "/usr/bin/ls","-l" , NULL };
if ((pid = vfork()) == -1)
perror("fork error");
else if (pid == 0)
{
execv("/usr/bin/ls", parm);
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,我在这里硬编码了ls
命令所在的位置(/usr/bin/ls
).现在假设我不知道特定命令在哪里并且想要执行它然后我该怎么做呢?我知道在常规shell PATH
中查找变量以实现相同,但是在使用C程序的情况下execv
如何实现它?
我有2个文本文件.file1
包含ID列表:
11002
10995
48981
79600
Run Code Online (Sandbox Code Playgroud)
file2
:
10993 item 0
11002 item 6
10995 item 7
79600 item 7
439481 item 5
272557 item 7
224325 item 7
84156 item 6
572546 item 7
693661 item 7
.....
Run Code Online (Sandbox Code Playgroud)
我试图选择file2
ID(第一列)所在的所有行file1
.目前,我正在做的是遍历第一个文件来创建一个正则表达式:
^\b11002\b\|^\b10995\b\|^\b48981\b|^\b79600\b
Run Code Online (Sandbox Code Playgroud)
然后运行:
grep '^11002\|^10995\|^48981|^79600' file2.txt
Run Code Online (Sandbox Code Playgroud)
但是当ID的数量file1
太大(~2000)时,正则表达式会变得很长而grep
变慢.还有另外一种方法吗?我正在使用Perl + Awk + Unix.
我刚刚开始学习Haskell,"学习Haskell for Great Good".我目前正在阅读"类型和类型类"一章,所以我的知识非常......不存在.我使用Sublime Text 2和SublimeHaskell包,它在每次保存时构建/检查文件.
问题:我正在尝试像这样进行函数类型声明:
funcName :: [Char] -> [Char]
Run Code Online (Sandbox Code Playgroud)
我收到这个警告:
警告:使用找到的字符串:[Char] - > [Char]为什么不:String - > String
建立失败
你能解释一下为什么使用Char数组而不是字符串是一个坏主意,或者给我一个链接来解释可能的反响等等.我用Google搜索,什么也没发现.
PS我是一名C#开发人员,我理解char数组和c语言中的字符串之间的区别.
我们使用(x:xs)
模式匹配第一个元素,如下例所示:
head' :: [a] -> a
head' xs = case xs of [] -> error "No head for empty lists!"
(x:_) -> x
Run Code Online (Sandbox Code Playgroud)
有没有办法在最后一个元素上进行模式匹配?
我有一个union
包含各种兼容struct
成员:
enum Type { T1, T2, … };
struct S1 { enum Type type; … };
struct S2 { enum Type type; … };
…
union U {
enum Type type;
struct S1 as_s1;
struct S2 as_s2;
…
};
Run Code Online (Sandbox Code Playgroud)
type
这些结构体的字段被视为不可变的,只type
访问当前对应的联合的字段。据我所知,铸造union U *
到struct S1 *
,只要被定义type
不变的坚持,而是相反也是如此?
struct S1 *s1 = malloc (sizeof (struct S1));
union U *u = (union U *)s1;
Run Code Online (Sandbox Code Playgroud)
也就是说,仅分配sizeof (struct S1)
字节并将结果强制转换为安全union U * …