小编Phi*_*erg的帖子

Eclipse CDT无需复制即可添加现有源

我有一个带有一些源文件的C++项目proj1,但我想也使用我在另一个项目proj2中的一些源文件.proj1和proj2都是目录my_projects的子目录.我不希望eclipse复制文件,因为我想确保我只有一个副本可以编辑.这就像MS Visual Studio的"添加现有项目"选项.

我的目标最终结果是能够为proj1和proj2创建makefile,将两个目录压缩在一起并将它们发送给同事,这样他们就可以使用make自己构建这两个项目.

这在Eclipse中可行吗?我搜索过但没有找到解决方案.

菲尔

c++ eclipse

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

隐藏模板化辅助函数 - 静态成员或未命名的命名空间

我正在尝试编写一个库,其中有一些模板化函数,其中一些是辅助函数,因此我不希望我的用户可以访问它们.一些基本代码可能是

//mylib.h

namespace myfuncs
{
    template<class T>
    void helper (T input, int extrainformation)
    {
       //do some usefull things
    }

    template<class T>
    void dostuff(T input)
    {
       int someinfo=4;
       helper(input, someinfo);
    }
}
Run Code Online (Sandbox Code Playgroud)

有可能以某种方式隐藏辅助函数,以便库的用户不能直接调用它吗?我原以为一个未命名的命名空间可能会起作用,但因为我使用的是模板,所以我无法在头文件和实现文件之间拆分函数声明和主体.将未命名的命名空间放在头文件中是没有用的,也不好用.我唯一能想到的就是创建一个mylib类并将这些函数封装为私有/公共静态函数.

任何更好的解决方案将不胜感激.

菲尔

c++ templates namespaces

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

用 C/C++ 编写库时使用哪种类型的 #include("" 或 &lt;&gt;)

我正在用 C++ 编写一个库。该库有多个头文件和 cpp 文件,需要跨平台(Windows Visual Studio 和 Linux gcc)。构建时,库和头文件安装在某个系统目录中,在同一台机器上的其他代码可以找到它们(例如 Linux 系统上的 /usr/local)。

如果我的标题之一需要#include 我的其他标题之一,那么我应该使用尖括号还是引号?

我觉得安装库后应该使用尖括号,以便检查系统目录,但是在构建库时我需要使用引号,以便检查本地目录并且我不会选择过时的版本从系统目录。

我知道 ow 的不同版本#include <filename>#include “filename”含义。对于编写库的情况,我在问哪个是合适的,为什么是合适的。

c c++ dll include lib

6
推荐指数
3
解决办法
6987
查看次数

std :: chrono :: high_resolution_clock和屏幕刷新率的准确性(不精确)

我正在使用visual studio 2012,想知道high_resolution_clock的准确性.

基本上我正在编写一些代码来显示声音和图像,但是我需要它们才能很好地同步,并且图像必须是无泪的.我正在使用directX来提供无泪图像,并使用high_resolution_clock进行计时屏幕刷新.显示器声称为60 fps,然而,使用high_resolution_clock的时序提供60.035 fps的刷新率,平均超过10000次屏幕刷新.根据哪个是正确的,我的音频将在一秒钟后以0.5毫秒结束,一小时后约为2秒.我希望任何时钟都比这更准确 - 更像是1年的漂移,而不是一个小时.

有没有人曾经看过这种东西.我应该期待我的声卡时钟再次不同吗?

编辑这是我的计时代码.这个while循环在我的渲染线程中运行.m_renderData是包含渲染场景所需数据的结构数组,每个屏幕有一个元素.对于测试我只在一个屏幕上运行,因此它只有一个元素

while(!TestDestroy())
{
    for(size_t i=0; i<m_renderData.size(); ++i)
    {
        //work out where in the vsync cycle we are and increment the render cycle
        //as needed until we need to actually render
        D3DRASTER_STATUS rStatus;  
        m_renderData[i].deviceD3D9->GetRasterStatus(0, &rStatus);
        if(m_renderData[i].renderStage==inVBlankRenderingComplete)
        {
            if(!rStatus.InVBlank)
                m_renderData[i].renderStage=notInVBlank;
        }
        else if(m_renderData[i].renderStage==notInVBlank)
        {
            if(rStatus.InVBlank)
                m_renderData[i].renderStage=inVBlankReadyToRender;
        }

        //check for missing the vsync for rendering
        bool timeOut=false;
        if(m_renderData[i].durations.size()>0)
        {
            double timeSinceLastRender=std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now()-m_renderData[i].durations.back()).count();
            if (timeSinceLastRender>expectedUpdatePeriod*1.2)
                timeOut=true;

        }

        if(m_renderData[i].renderStage==inVBlankReadyToRender || timeOut)
        {
            //We have reached the time …
Run Code Online (Sandbox Code Playgroud)

c++ directx time monitor

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

朋友调用虚拟私有方法 - 会发生什么

我有一种情况,我希望朋友类调用私有方法,然后我想让这个方法虚拟,所以派生一个类的方法将被调用 - 然后我当然意识到友谊不是继承.所以我们有一种情况,其中虚方法意味着应该调用派生类的方法,但是这个方法是私有的,因此无法调用.哪个有优先权?

我在MSVC++ 2008上测试了这个,如下所示

#include<iostream>

class Loner;

class Base
{
    friend Loner;
private:
    virtual void test(){std::cout << "Base" << std::endl;}
};

class Derived : public Base
{
private:
    virtual void test(){std::cout << "Derived" << std::endl;}
};

class Loner
{
public:
    void test(Base *base){base->test();}
};

int main()
{
    Loner loner;
    Derived derived;
    loner.test(&derived);
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Derived
Run Code Online (Sandbox Code Playgroud)

因此,似乎虚拟功能"获胜"并让私人成员访问非朋友 - 几乎是朋友继承!

我的问题是,有谁知道这是否是正确的行为?当我最终完成升级我的编译器版本或者如果我尝试GCC时,这种行为会改变吗?

干杯

菲尔

c++ methods virtual inheritance friend

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

C++ - 自动返回引用和非引用类型

当编写具有返回类型的函数时,auto我们可以使用constexpr if返回不同的类型。

auto myfunc()
{
   constexpr if (someBool)
   {
      type1 first = something;
      return first;
   }
   else
   {
      type2 second = somethingElse;
      return second;
   }
}
Run Code Online (Sandbox Code Playgroud)

然而,我正在努力弄清楚如何仅将其中一种类型作为参考。看来以下代码仍然返回两个分支的右值

auto myfunc()
{
   constexpr if (someBool)
   {
      type1 &first = refToSomething;
      return first;
   }
   else
   {
      type2 second = somethingElse;
      return second;
   }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?谷歌并没有透露太多,因为有很多关于自动和引用返回的更一般使用的教程。在我的特定情况下,该函数是一个类方法,我想返回对成员变量的引用或数组的视图。

c++ reference rvalue lvalue auto

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

变量未在此范围内声明gcc错误

我有以下模板化功能

//This is a very naive implementation, but it will do
template<class T>
T determinant(const std::vector<std::vector<T>> &matrix)
{
    sci::assertThrow(square(matrix), sci::err());
    if (matrix.size() == 1)
        return matrix[0][0];
    else if (matrix.size() == 2)
        return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
    else
    {
        double result = 0;
        std::vector<std::vector<double>> minor(matrix.size() - 1);
        double multiplier = 1.0;
        for (size_t i = 0; i < matrix.size(); ++i)
        {
            for (size_t j = 0; j < minor.size(); ++j)
            {
                if (j < i)
                    minor[j] = matrix[j]; …
Run Code Online (Sandbox Code Playgroud)

c++ gcc

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

标签 统计

c++ ×7

auto ×1

c ×1

directx ×1

dll ×1

eclipse ×1

friend ×1

gcc ×1

include ×1

inheritance ×1

lib ×1

lvalue ×1

methods ×1

monitor ×1

namespaces ×1

reference ×1

rvalue ×1

templates ×1

time ×1

virtual ×1