小编Gri*_*wes的帖子

调度程序的RTC与PIT

我的教授说,建议使用PIT而不是RTC来实现基于纪元的循环调度程序.他没有真正提到任何具体原因,我也想不出任何理由.有什么想法吗?

operating-system osdev

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

模板模板C++函数

如何编写在任意类型的任意容器上运行的模板函数?例如,我如何推广这个虚函数

template <typename Element>
void print_size(const std::vector<Element> & a)
{
    cout << a.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

template <template<typename> class Container, typename Element>
void print_size(const Container<Element> & a)
{
    cout << a.size() << endl;
}
Run Code Online (Sandbox Code Playgroud)

这是一个典型的用法

std::vector<std::string> f;
print_size(f)
Run Code Online (Sandbox Code Playgroud)

这给出了错误

tests/t_distances.cpp:110:12: error: no matching function for call to ‘print(std::vector<std::basic_string<char> >&)’. I'm guessing I must tell the compiler something more specific about what types that are allowed.
Run Code Online (Sandbox Code Playgroud)

什么是模板使用的这种变体被调用,我该如何解决?

c++ templates std

5
推荐指数
2
解决办法
6898
查看次数

使用比较运算符将 std::string 作为 std::map 中的键

我正在尝试使用 std::string 作为 std::map 中的键,但是,我无法正确 find() 。我的代码有点复杂和大,所以这是一个演示我遇到的问题的小程序。如果有人能告诉我为什么这不起作用,我将不胜感激。

谢谢。

#include <stdio.h>
#include <string>
#include <map>

struct comparer
{
    public:
    bool operator()(const std::string x, const std::string y)
    {
         return x.compare(y)==0;
    }
};

int main(int argc, char *argv[])
{
    std::map<std::string, int, comparer> numbers;
    numbers.insert(std::pair<std::string,int>("One",1));
    numbers.insert(std::pair<std::string,int>("Two",2));
    numbers.insert(std::pair<std::string,int>("Three",3));
    numbers.insert(std::pair<std::string,int>("Four",4));
    numbers.insert(std::pair<std::string,int>("Five",5));


    std::map<std::string, int, comparer>::iterator it=numbers.find("Three");
    if(it!=numbers.end())
        printf("The number is %d\n",(*it).second);
    else
        printf("Error, the number is not found\n");
}
Run Code Online (Sandbox Code Playgroud)

c++ key stdmap std stdstring

5
推荐指数
1
解决办法
3万
查看次数

确定C++中包含的符号的来源

我目前正在开发一个禁止包含C++标准库的项目.我们使用的其中一个编译文件列出了以下符号: _Xran__Q2_3std12_String_baseCFv

我相信这与标准库字符串有关.我这么想是不正确的?如果没有,是否有人知道一种有效的方法来追踪这个符号的包含点?粗略搜索代码库并没有显示任何明显的东西.

c++ include visual-studio

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

从Jam迁移到CMake

我理解Jam构建现有项目,CMake生成要构建的项目.但是,鉴于我宁愿生成可以在各种IDE中使用的项目,而不是尝试将Jam集成到那些IDE中,有没有人有任何经验/成功将Jamfile转换为CMakeLists.txt文件?

cross-platform cmake jam bjam

5
推荐指数
2
解决办法
2577
查看次数

在可变扩展中的排序

对于这个非变量的例子:

int     Func1();
double  Func2();
void    MyFunc( int, double );

int  main()
{
    MyFunc( Func1(), Func2() );
    //...
}
Run Code Online (Sandbox Code Playgroud)

它没有规定是否Func1()还是Func2()先计算,只是两者都必须做之前MyFunc()被调用.

这个测序如何与可变参数的扩展一起工作?

template < typename Func, typename ...Args >
void  MyFunc2( Func &&f, Args&& ...a )
{
    int  b[] = { f( std::forward<Args>(a) )... };
    //...
}
Run Code Online (Sandbox Code Playgroud)

假设这f是一个在第一次调用后改变其状态的函数对象.是否会f为每个段调用a?换句话说,将fa列表中的第一个项目,然后第二个项目,第三个项目等上调用,而不是随机跳过扩展列表?我们曾经在每个项目之间调用序列点吗?

c++ variadic-functions sequence-points variadic-templates c++11

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

为什么界面需要重新声明?

我有一个抽象的基类,并希望在派生类中实现一个函数.为什么我必须再次在派生类中声明该函数?

class base {
public:
    virtual int foo(int) const = 0;
};

class derived : public base {
public:
    int foo(int) const; // Why is this required?
};

int derived::foo(int val) const { return 2*val; }
Run Code Online (Sandbox Code Playgroud)

c++ inheritance

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

OpenGL渲染模式

到目前为止,我知道立即,显示列表,顶点缓冲区和顶点缓冲区对象渲染.哪个是最快的?哪个OpenGL版本都需要?我该怎么用?

opengl

5
推荐指数
2
解决办法
2163
查看次数

C++ - 将istream_iterator与wstringstream一起使用

我正在尝试为我编写的程序添加Unicode支持.我的ASCII代码已编译并具有以下行:

std::stringstream stream("abc");
std::istream_iterator<std::string> it(stream);
Run Code Online (Sandbox Code Playgroud)

我将其转换为:

std::wstringstream stream(L"abc");
std::istream_iterator<std::wstring> it(stream);
Run Code Online (Sandbox Code Playgroud)

我在istream_iterator构造函数中收到以下错误:

error C2664: 'void std::vector<_Ty>::push_back(std::basic_string<_Elem,_Traits,_Alloc> &&)' : cannot convert parameter 1 from 'std::basic_string<_Elem,_Traits,_Alloc>' to 'std::basic_string<_Elem,_Traits,_Alloc> &&'
1>          with
1>          [
1>              _Ty=std::wstring,
1>              _Elem=wchar_t,
1>              _Traits=std::char_traits<wchar_t>,
1>              _Alloc=std::allocator<wchar_t>
1>          ]
1>          and
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>,
1>              _Alloc=std::allocator<char>
1>          ]
1>          and
1>          [
1>              _Elem=wchar_t,
1>              _Traits=std::char_traits<wchar_t>,
1>              _Alloc=std::allocator<wchar_t>
1>          ]
1>          Reason: cannot convert from 'std::basic_string<_Elem,_Traits,_Alloc>' to 'std::basic_string<_Elem,_Traits,_Alloc>'
1>          with
1>          [
1>              _Elem=char,
1>              _Traits=std::char_traits<char>, …
Run Code Online (Sandbox Code Playgroud)

c++ unicode std

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

clang中的constexpr错误但不是gcc中的错误?

我们来看一个这个简单的例子:

#include <iostream>

namespace foo {
    constexpr int main(int argc, char* argv[]) {
      // code
    }
}

int main(int argc, char* argv[])
{
    return foo::main(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)

取决于代码是什么,clang会抱怨或不抱怨.如果代码是:

cout << "Hello!";
return 0;
Run Code Online (Sandbox Code Playgroud)

clang抱怨:

错误:constexpr函数永远不会产生常量表达式[-Winvalid-constexpr]

constexpr int main(int argc, char* argv[]) {
Run Code Online (Sandbox Code Playgroud)

注意:非constexpr函数'operator <<>'不能用于常量表达式

    std::cout << "Hello!";
Run Code Online (Sandbox Code Playgroud)

/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/ostream:530:5:注意:在这里声明

operator<<(basic_ostream<char, _Traits>& __out, const char* __s)
Run Code Online (Sandbox Code Playgroud)

很公平,constexpr函数不能包含任何cout语句,我们知道.但是如果我们这样做会发生什么?

  for (int i = 0; i < argc; i++)
    std::cout << argv[i];
Run Code Online (Sandbox Code Playgroud)

clang允许它!好吧,但这不可能是一个constexpr函数,即使它被标记为constexpr,让我们尝试在constexpr上下文中使用它.

int arr[foo::main(argc, argv)];
Run Code Online (Sandbox Code Playgroud)

有用!那一定是cla​​ng bug?我之所以说clang是因为gcc抱怨:

错误:constexpr函数的主体'constexpr int foo :: main(int,char**)'不是return语句 …

c++ clang constexpr c++14

5
推荐指数
2
解决办法
4441
查看次数