我需要编写跨平台的GUI应用程序,我可以使用哪些工具包?目前我在Windows,MSVC和Linux,gcc工作.
我想用来自Linux标准库http://www.linuxfoundation.org/collaborate/workgroups/lsb的 LSB C++编译器构建我的程序.程序取决于使用gcc 4.4版本构建的Boost库.编译失败.是否可以使用LSB C++编译器构建Boost库?或者,是否可以使用一些旧的gcc版本构建Boost库,建议使用什么版本?我的最终目标是让我的可执行文件和第三方Boost库在大多数Linux发行版上运行.
通常,可以采取哪些措施来获得更好的Linux发行版二进制兼容性,根据Boost库开发C++闭源应用程序?
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(2);
std::for_each(v.begin(), v.end(), std::cout << boost::lambda::_1 << "\n");
}
Run Code Online (Sandbox Code Playgroud)
可以在不使用Boost的情况下将此代码转换为C++吗?我知道C++ 0x lambda表达式语法,但没有尝试在这样的上下文中使用占位符.
我使用Eclipse创建了ApiDemos项目 - New Project - Sample命令.试图在Android模拟上执行它,我遇到了安装错误.然后我在文件资源管理器DDMS中打开了data/app目录,并删除了名称从ApiDemos开始的两个文件(可能这是不正确的,但这已经完成).现在,尝试执行我的ApiDemos项目,我有:
[2011-11-15 16:23:19 - ApiDemos] Installation error: INSTALL_FAILED_UPDATE_INCOMPATIBLE [2011-11-15 16:23:19 - ApiDemos] Please check logcat output for more details. [2011-11-15 16:23:19 - ApiDemos] Launch canceled!
logcat的:
package com.example.android.apis signatures do not match the previously installed version, ignoring!
现在可以纠正这个问题吗?我知道我可以重新创建模拟器,但我想用现有的模拟器来解决这个问题,只是为了知道它应该如何完成.
Android Java项目,重现问题的最小代码:
Constants.java
:
package alex.restaurantfinder;
public class Constants {
public static final String LOGTAG = "...";
}
Run Code Online (Sandbox Code Playgroud)
ReviewCriteria.java
:
package alex.restaurantfinder;
import android.app.Activity;
public class ReviewCriteria extends Activity {
static String s = Constants.LOGTAG; // error
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
Constants.LOGTAG无法解析.
我的错误在哪里?
编辑.问题是,当我在Eclipse中按下Ctrl + Shft + O时,它添加了这一行:
import android.provider.SyncStateContract.Constants;
它阻止编译器使用我自己的Constants类.
byte
我想编写通用类,旨在与和 等内置类型一起使用ushort
。在内部计算中,我需要将泛型类型转换为整数,然后再转换回泛型类型。我找到了编译此类代码的方法,例如:
class Test<T> where T : struct, IConvertible
{
public static T TestFunction(T x)
{
int n = Convert.ToInt32(x);
T result = (T)Convert.ChangeType(n, typeof(T));
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为,如果在计算循环中使用此类转换,则可能会显着降低性能。有没有更好的方法来进行这些转换?
我在C#2010类库中有以下代码:
/// <summary>
/// Execute all enable tests synchronously.
/// Function may throw exception if executed in invalid state (for example, all tests are disabled).
/// If function doesn't throw exception, this doesn't mean, that all tests succeeded. After function
/// finished, it is necessary to check the state of all tests.
/// Function is synchronous and may take a long time to execute.
/// Use <see cref="SiX_Dg_RequestStop"/> function to stop this function from another thread.
/// </summary>
/// <exception …
Run Code Online (Sandbox Code Playgroud) 假设我们需要以相反的顺序打印int
大小的数组:N
// Wrong, i is unsigned and always >= 0:
for(size_t i = N-1; i >= 0; --i){cout << data[i];}
// Correct, but uses int instead of size_t:
for(int i = N-1; i >= 0; --i){cout << data[i];}
// Correct, but requires additional operation in the loop:
for(size_t i = N; i > 0; --i){cout << data[i-1];}
// Probably the best version, but less readable.
// Is this well-defined behavior?
for(size_t i = N-1; i != (size_t)(-1); …
Run Code Online (Sandbox Code Playgroud) 我需要编写C++ API,它包含几个使用.lib文件(MSVC)从Dll公开的导出C++类.从我理解的另一个问题的答案来看,导出的类方法不能使用异常,如果C++ API是在一个VC++版本中构建的(比如2010),而客户端代码是用另一个VC++版本编写的.由于异常不能成为公共API接口的一部分,我正在寻找另一种错误处理策略.我的限制:我不想使用COM,而丰富的错误代码系统(如HRESULT)对我来说还不够.我希望有类似异常的类,其中包含错误代码,错误消息和我需要的任何其他信息.另外,我不想为每个VC++版本单独构建.
我目前的做法如下.每个公共类方法都返回枚举值(如ErrorCode).在方法失败的情况下,像GetLastErrorInfo这样的静态函数返回指向C++类的指针(比如说ErrorInfo),它包含到达错误信息.ErrorInfo保留为特定于线程的数据,并包含当前线程中最后一次调用的错误信息.如果最后一次API调用成功,则GetErrorInfo返回NULL.
请考虑以下代码:
try { classPtr->DoSomething(); cout << classPtr->GetData() << endl; } catch(const MyException& ex) { cout << ex.GetErrorMessage() << endl; return; }
没有例外,它看起来像这样:
ErrorCode result; int data; result = classPtr->DoSomething(); if ( result != Success ) { cout << MyClass::GetLastErrorInfo()->GetErrorMessage() << endl; return; } result = classPtr->GetData(data); if ( result != Success ) { cout << MyClass::GetLastErrorInfo()->GetErrorMessage() << endl; return; } cout << data << endl;
这看起来不太好.类接口很乱:每个函数现在都有ErrorCode返回类型.返回值成为输出参数.是否有更好的方法,允许达到错误信息,并保持干净的公共API接口?
我在VC++ 2010中创建控制台应用程序,并向其添加以下代码:
#include <d3d10.h> #include <d3dx10.h> #include <DxErr.h> #pragma comment(lib, "d3d10.lib") #pragma comment(lib, "d3dx10.lib") #pragma comment(lib, "dxgi.lib") #pragma comment(lib, "dxerr.lib") int _tmain(int argc, _TCHAR* argv[]) { IDXGIFactory* pDXGIFactory; CreateDXGIFactory(IID_IDXGIFactory, ( void** )&pDXGIFactory); return 0; }
构建此项目,我有链接器错误:错误LNK2001:未解析的外部符号_IID_IDXGIFactory
现在我创建具有MFC支持的控制台应用程序,并添加相同的代码.构建成功.第一种情况有什么问题?为什么MFC项目成功构建,非MFC项目失败?