小编klk*_*206的帖子

C++,可以采用 ifstream 或 istringstream 的函数

我有一个do_something从流中读取无符号字符的函数。

可以从给定文件名的文件创建流。或者它可以通过将给定的字符串视为数据来创建。我想在这两种情况下重用该功能。

下面的代码在第二种情况下给出了一个错误:“错误 C2664: 'do_something: 无法将参数 1 从 'std::basic_istringstream' 转换为 'std::basic_istream'”

这样做的正确方法是什么?

static void do_something(std::basic_istream<unsigned char>& in)
{
   in.get();
}

static void string_read(unsigned char* in)
{
   std::basic_ifstream<unsigned char> file(std::string("filename"));
   do_something(file);

   std::basic_istringstream<unsigned char> str(std::basic_string<unsigned char>(in));
   do_something(str);
}
Run Code Online (Sandbox Code Playgroud)

c++ ifstream istringstream

19
推荐指数
1
解决办法
434
查看次数

带有删除程序类的 shared_ptr - 为什么要复制删除程序?

假设我创建了一个带有自定义删除器的共享指针。在下面的代码中,我想检查删除器对象本身会发生什么:

struct A {
    A() { std::cout << "A\n"; }
    ~A() { std::cout << "~A\n"; }
};

struct D {
    D() {
        std::cout << "D\n";
    }
    ~D() {
        std::cout << "~D\n";
    }
    D(const D&) {
        std::cout << "D(D&)\n";
    }
    void operator()(A* p) const {
        std::cout << "D(foo)\n";
        delete p;
    }
};

int main()
{
    std::shared_ptr<A> p(new A, D());
}
Run Code Online (Sandbox Code Playgroud)

我看到,D(const D&)~D()在“删除器”类被称为六次:

D
A
D(D&)
D(D&)
D(D&)
D(D&)
D(D&)
D(D&)
~D
~D
~D
~D
~D
~D
D(foo) …
Run Code Online (Sandbox Code Playgroud)

c++ copy-constructor shared-ptr

7
推荐指数
1
解决办法
360
查看次数

ASN.1 中隐式和显式标签的编码

我试图了解隐式和显式标签实际上是如何以 DER 二进制形式编码的。

基本的例子很清楚。普通整数,

x INTEGER ::= 5
Run Code Online (Sandbox Code Playgroud)

被编码为 TLV 三元组02 01 05。在

x [2] IMPLICIT INTEGER ::= 5
Run Code Online (Sandbox Code Playgroud)

隐式标记82替换现有标记02并形成另一个 TLV:82 01 05,并且在

x [3] EXPLICIT INTEGER ::= 5
Run Code Online (Sandbox Code Playgroud)

在原始 TLV 周围添加了一个包装器:A3 03 02 01 05

现在我正在研究一个更复杂的案例

30 42 A1 40 30 0D 82 0B  77 77 77 2E 62 61 64 2E
6F 72 67 30 09 82 07 62  61 64 2E 63 6F 6D 30 0D
81 …
Run Code Online (Sandbox Code Playgroud)

asn.1 der ber

7
推荐指数
1
解决办法
3057
查看次数

标签 统计

c++ ×2

asn.1 ×1

ber ×1

copy-constructor ×1

der ×1

ifstream ×1

istringstream ×1

shared-ptr ×1