小编Art*_*yom的帖子

模板类的模板特化

我想专门研究以下成员函数:

class foo {
    template<typename T>
    T get() const;
};
Run Code Online (Sandbox Code Playgroud)

对于bar依赖于模板的其他类.

例如,我想barstd::pair有一些模板参数,这样的事情:

template<>
std::pair<T1,T2> foo::get() const
{
    T1 x=...;
    T2 y=...;
    return std::pair<T1,T2>(x,y);
}
Run Code Online (Sandbox Code Playgroud)

T1和T2也是模板.如何才能做到这一点?据我所知,它应该是可能的.

所以现在我可以打电话:

some_foo.get<std::pair<int,double> >();
Run Code Online (Sandbox Code Playgroud)

完整/最终答案:

template<typename T> struct traits;
class foo {
    template<typename T>
    T get() const
    {
       return traits<T>::get(*this); 
    }
};

template<typename T>
struct traits {
    static T get(foo &f)
    {
        return f.get<T>();
    }
};

template<typename T1,typename T2>
struct traits<std::pair<T1,T2> > {
        static std::pair<T1,T2> get(foo &f)
        {
                T1 x=...; …
Run Code Online (Sandbox Code Playgroud)

c++ templates specialization

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

如何使用Boost.Asio解析主机(仅限)?

根据为了解析主机的文档,boost::asio::ip::tcp::resolver::query它也应该接收服务.

如果我想解决与端口无关的主机怎么办?我该怎么办呢?我应该指定虚拟端口吗?

c++ boost boost-asio

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

由CppCMS提供支持的实时网站

CppCMS对我来说很好..但你知道任何由CppCMS提供支持的现场网站吗?

c++ frameworks cppcms

7
推荐指数
2
解决办法
4080
查看次数

使用UTF-8输出在Windows控制台下printf和std :: ostream之间有什么不同

我有一个程序将UTF-8字符串打印到控制台:

#include <stdio.h>

int main()
{
    printf("??? Peace ??????\n");
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

我将控制台配置为使用True Type字体(Lucida Console),定义UTF-8代码页(chcp 65001)使用MinGW GCC和Visual Studio 2010编译此程序它完美地工作,我看到:输出:

??? Peace ??????
Run Code Online (Sandbox Code Playgroud)

我也这样做 std::cout

#include <iostream>

int main()
{
    std::cout << "??? Peace ??????\n" ;
    return 0;   
}
Run Code Online (Sandbox Code Playgroud)

如上所述,使用MinGW GCC完全正常,但使用Visual Studio 2010,我得到正方形,而不是正方形(每个非ASCII字母两个).

如果我使用重定向运行程序,test >test.txt我会在文件中获得完美的UTF-8输出.

两个测试都在Windows 7上完成.

问题:

  1. Visual Studio标准库中printf和std :: cout在处理输出流时有什么区别 - 显然其中一个有效,另一个没有?
  2. 怎么解决这个问题?

真正的答案:

简而言之:你被搞砸了 - std::cout与MSVC + UTF-8无法真正合作 - 或者至少需要付出巨大努力才能使其表现得相当合理.

总之:阅读答案中引用的两篇文章.

c++ unicode winapi visual-c++

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

使用无法安装的有效STATIC成员函数

我有以下代码:

它在gcc-3.4,gcc-4.3,intel编译器下编译没有问题,但在MSVC9下失败.

MSVC告诉"使用未定义的类型c_traits<C>,同时void foo<C>::go(void)使用C = short 编译类模板成员函数.

编译器试图安装未使用的类的未使用的成员函数,因为这个类根本就没用过.

我可以通过专门化整个类foo而不是专门化其成员函数来解决这个问题.但是,由于各种原因,专门针对整个班级的问题对我来说有点问题.

最大的问题:什么是对的?

  • 我的代码是错误的,gcc和intel编译器只是忽略了这个问题,因为它们没有完全安装foo,或者
  • 代码是正确的,这是MSVC9(VC 2008)的错误,它试图安装未使用的成员函数?

代码:

class base_foo {
public:
    virtual void go() {};
    virtual ~base_foo() {}
};
template<typename C>
struct c_traits;

template<>
struct c_traits<int> {
    typedef unsigned int_type;
};

template<typename C>
class foo : public base_foo {
public:
    static base_foo *create()
    {
        return new foo<C>();
    }
    virtual void go() 
    {
        typedef typename c_traits<C>::int_type int_type;
        int_type i;
        i=1;
    }
};

template<>
base_foo *foo<short>::create()
{
    return new base_foo(); …
Run Code Online (Sandbox Code Playgroud)

c++ specialization visual-c++

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

在Boost.Asio中释放套接字(与assign相反),或者不转移所有权

在Boost.Asio套接字中有一个函数赋值,但我正在寻找类似的东西

  • 释放/取消分配将套接字上的所有权转移回用户.

要么

  • 某种类型的赋值不会将所有权转移到套接字类,因此它不会在销毁时关闭它.

我知道这个解决方案,但它涉及复制套接字(即创建新的描述符而不是释放一个).

有谁知道怎么做?

编辑:没有这样的功能,为Boost打开了门票.Asio https://svn.boost.org/trac/boost/ticket/3900

c++ sockets boost boost-asio

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

文件流tellg/tellp和gcc-4.6这是一个bug吗?

这段代码:

#include <iostream>
#include <cstdio>
#include <fstream>
#include <string>

int main()
{   
    std::remove("test.txt");
    std::fstream f("test.txt",std::ios::in | std::ios::out | std::ios::binary | std::ios::trunc);
    std::cout << f.good() << std::endl;
    f<<"test"<< std::flush;
    std::cout << f.tellg() << " " << f.tellp() << std::endl;
    f.seekg(0);
    std::string s;
    f>>s;
    std::cout << f.tellg() << " " << f.tellp() << std::endl;
}   
Run Code Online (Sandbox Code Playgroud)

在gcc-4.4.5中给出以下输出

1
4 4
4 4
Run Code Online (Sandbox Code Playgroud)

即tellg和tellp返回预期的流位置4.

而gcc-4.6.0

得到:

1
4 4
-1 4
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到参考资料:

  1. 第一种情况是正确的(gcc-4.6中的错误)
  2. 第二种情况是正确的(gcc中的错误<gcc-4.6)
  3. 两种情况都是正确的,行为是未定义的

c++ gcc iostream

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

在linux上实时防止小页面错误

我需要让这个过程尽可能地实时运行.

所有的通信都是通过共享内存完成的 - 内存映射文件 - 根本没有系统调用 - 它使用繁忙的等待共享内存.

该进程在实时优先级下运行,所有内存都被锁定mlockall(MCL_CURRENT|MCL_FUTURE),成功并且进程足以ulimits 锁定所有内存.

当我在它上面运行时,perf stat -p PID我仍然会得到次要页面错误的计数.

我用过程亲和力测试了这个,没有.

题:

是否有可能消除它们 - 即使是轻微的页面错误?

linux real-time page-fault

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

doxygen中的"新版API在ABC版本"页面

例如,有一个Doxygen选项用于指定API何时使用\since标记出现

///
/// Does foo
///
/// \since 1.5
///
void foo();
Run Code Online (Sandbox Code Playgroud)

它会出现在foo()文档中.

我正在寻找一种自动创建页面的方法,该页面包含1.5中出现的所有API - 即列出所有标记的API \since 1.5或可能的其他标记(如果可用).

编辑:我尝试使用\ingroup并创建一个包含所有新API的组页面,它可以工作.但它将描述移到此页面,例如将一个新方法从类定义移动到页面"1.2.3中的新建",这不是我想要的.

versioning doxygen

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

检测张量流保存模型的第一个/最后一个通道?

有没有办法检测加载为 TF 保存模型的第一个或最后一个格式的通道model=tf.saved_model.load(path)

在 Keras 中,可以model.layers检查层 ll.data_format == 'channels_last'

TF保存的模型有这样的东西吗?我找不到任何合适的 TF 模型细节文档——一切都可以追溯到 Keras。

inference tensorflow

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