小编sum*_*ier的帖子

为什么STL中没有"Iterable"接口?

C++ STL似乎不经常使用纯粹的抽象基类(也就是接口).我知道大多数事情都可以通过STL算法或聪明的模板元编程来实现.

但是,对于某些用例(例如,在API中,如果我不想具体说明我得到的容器类型,只是它包含的元素),以下形式的接口会很好:

template<typename T> struct forward_iterable {
    struct iterator {
        typedef T  value_type;
        typedef T& reference;
        typedef T* pointer;
        virtual reference operator*() const = 0;
        virtual pointer operator->() const = 0;
        virtual bool operator==(const iterator&) const = 0;
        virtual bool operator!=(const iterator&) const = 0;
        virtual operator const_iterator() const = 0;
        virtual iterator& operator++() = 0;
        virtual iterator  operator++(int) = 0;
    };
    struct const_iterator { ... };  // similar, but with const references

    virtual iterator begin() = 0;
    virtual …
Run Code Online (Sandbox Code Playgroud)

abstract-class iterator design-patterns stl

10
推荐指数
1
解决办法
4781
查看次数

是否有Fortran“双精度”与C“双精度”不同的平台?

为了与C程序实现互操作性,Fortran标准的2003年修订版引入了一个模块iso_c_binding,该模块允许编写以下内容:

USE iso_c_binding, ONLY: c_int, c_float
INTEGER(KIND=c_int) :: x
REAL(KIND=c_float) :: y
Run Code Online (Sandbox Code Playgroud)

保证可以在C端精确映射到a int x和a float y。现在对于整数,这是至关重要的,因为默认INTEGER类型(取决于编译器和平台)可以很好地包装为64位整数类型,即使int是32位。

但是,对于浮点类型,以下映射似乎是不可避免的:

REAL*4  (or)  REAL               ->  float
REAL*8  (or)  DOUBLE PRECISION   ->  double
Run Code Online (Sandbox Code Playgroud)

因此,这里的问题:是否有任何实际的平台或编译器在哪里,这是没有满足,例如,在那里sizeof(REAL*4) != sizeof(float)

c fortran language-interoperability fortran-iso-c-binding

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