我正在开始一个新的Web开发项目,我厌倦了编写登录系统.这是以前必须做过几十次的事情.我真的想使用其他人的代码,因为它比滚动我自己更容易,而且可能会更好.我更喜欢开源所有常见的原因,但大多数情况下,如果我不喜欢的话,我希望能够改变它,并且错误修正比设计整个事情更容易.
我只需要一个登录系统,管理用户名/密码和用户注册.我不需要整个CMS.
我已经在查看openid.net了,但是你使用了哪些开源登录系统?您还听说过其他哪些登录系统?
许多其他帖子,如"将整个ASCII文件读入C++ std :: string "解释了一些选项是什么,但没有深入描述各种方法的优缺点.我想知道为什么一种方法优于另一种方法?
所有这些都std::fstream
用于将文件读入std::string
.我不确定每种方法的成本和收益.让我们假设这是一个常见的情况,其中已知读取文件是一些小的内存可以轻松容纳,无论你如何操作,清楚地将多TB文件读入内存是一个坏主意.
在几个谷歌搜索将整个文件读入std :: string之后,最常见的方法std::getline
是在每行之后使用并添加换行符.这对我来说似乎不用了,但有一些性能或兼容性原因,这是理想的吗?
std::string Results;
std::ifstream ResultReader("file.txt");
while(ResultReader)
{
std::getline(ResultReader, Results);
Results.push_back('\n');
}
Run Code Online (Sandbox Code Playgroud)
我拼凑在一起的另一种方法是更改getline分隔符,使其不在文件中.EOF字符似乎不太可能在文件的中间,所以这似乎是一个可能的候选人.这包括一个强制转换,所以至少有一个原因不这样做,但这确实会立即读取一个文件而没有字符串连接.据推测,分隔符检查仍然需要一些费用.有没有其他充分理由不这样做?
std::string Results;
std::ifstream ResultReader("file.txt");
std::getline(ResultReader, Results, (char)std::char_traits<char>::eof());
Run Code Online (Sandbox Code Playgroud)
转换意味着在将std :: char_traits :: eof()定义为-1以外的系统上可能会出现问题.这是一个实际的理由,不选择使用std::getline
和其他方法string::push_pack('\n')
.
如何在这个问题中将这些文件与其他读取文件的方法进行比较:将整个ASCII文件读入C++ std :: string
std::ifstream ResultReader("file.txt");
std::string Results((std::istreambuf_iterator<char>(ResultReader)),
std::istreambuf_iterator<char>());
Run Code Online (Sandbox Code Playgroud)
这似乎是最好的.它将几乎所有工作卸载到标准库上,该库应该针对给定平台进行大量优化.除了流有效性和文件结尾之外,我认为没有理由进行检查.这是理想的还是存在看不见的问题.
标准或某些实现的细节是否提供了偏好某种方法而不是另一种方法的理由?我是否错过了一些可能在各种情况下都很理想的方法?
什么是最简单,最惯用,最佳性能和标准兼容的方式将整个文件读入std::string
?
编辑 - 2 这个问题促使我写了一小套基准.它们是MIT许可证,可在github上获得:https://github.com/Sqeaky/CppFileToStringExperiments
最快 - TellSeekRead和CTellSeekRead-这些系统提供了一个容易获得的大小并一次读取文件.
更快 - Getline追加和Eof - 检查字符似乎没有任何成本.
快 - RdbufMove和Rdbuf - std :: move似乎在发布中没有任何区别. …
我正在寻找一个好的电子商务CMS.
我需要能够销售服务和产品,它必须是开源的,可以在任何需要的地方进行定制.
我对PHP和Mysql非常熟悉,并且对python和ruby有点熟悉,所以PHP解决方案将是首选.
我有一个包含许多下载链接的表格的网页,我想让 selenium 点击最后一个:
桌子:
item1 Download
item2 Download
item3 Download
Run Code Online (Sandbox Code Playgroud)
selenium 一定要点击Download
nextitem3
我使用 xpath 查找所有元素,然后以这种方式获取返回数组或字典的大小
x = bot._driver.find_element_by_xpath("//a[contains(text(),'Download')]").size()
Run Code Online (Sandbox Code Playgroud)
但我总是收到这个错误
TypeError: 'dict' object is not callable
Run Code Online (Sandbox Code Playgroud)
我尝试使用get_xpath_count
methode,但python中的selenium中不存在methode!
我想到了另一种解决方案,但我不知道该怎么做,如下所示
x = bot._driver.find_element_by_xpath("(//a[contains(text(),'Download')])[size()-1]")
Run Code Online (Sandbox Code Playgroud)
或者
x = bot._driver.find_element_by_xpath("(//a[contains(text(),'Download')])[last()]")
Run Code Online (Sandbox Code Playgroud)
或者是其他东西
我有一些关于子弹物理库的一般性问题.
以下是我目前的理解:
btDiscreteDynamicsWorld - 最简单的物理世界,只处理刚体,也许它具有更好的性能.
btSoftRigidDynamicsWorld - 唯一可以使用大型jello模具的物理世界
btContinuousDynamicsWorld - 如果你有真正的快速物体,这将阻止它们互相预先穿过或相互飞行,但其他方面就像btDiscreteDynamicsWorld.
我对btDiscreetDynamicsWorld,btContinuousDynamicsWorld和btSoftRigidDynamicsWorld类在功能,目的和性能方面的理解是否正确?
为什么用户手册会推荐btDiscreteDynamicsWorld类?
btSoftRigidDynamicsWorld似乎是唯一可以处理软体的世界,那么如果我们想要连续物理整合和软体呢?
考虑使用btContinuousDynamicsWorld的速度有多快,使用它有什么缺点?
编辑:My Buddy Mako也在The Bullet论坛上发布了这个问题:http://www.bulletphysics.org/Bullet/phpBB3/viewtopic.php? f = 9&t = 4863
如果我在一个文件中有一个类我无法改变,但我需要在doxygen中记录,最好的方法是什么?我知道最好在实际的.h或.cpp文件中记录,但在这个特定的例子中,这是不可能的.
我已经想出如何记录一些成员,但我不能以可靠的方式记录操作员.让我举个例子.这是一个示例类,其中包含导致问题的成员和一个运行良好的成员:
class Foo
{
public:
int Bar();
bool operator!() const;
};
Run Code Online (Sandbox Code Playgroud)
在其他一些doxygen透视的文件中,我提出了以下内容:
/// @fn Foo::Bar
/// @brief Some info about the constructor
/// @return Some stuff about what bar returns
Run Code Online (Sandbox Code Playgroud)
构造函数的文档有效,但这不符合:
/// @fn Foo::operator!
/// @brief Some info about the operator
/// @return Some stuff about what the operator! returns
Run Code Online (Sandbox Code Playgroud)
也不是:
/// @fn operator!
/// @memberof Foo
/// @brief Some info about the operator
/// @return Some stuff about what the operator! returns
Run Code Online (Sandbox Code Playgroud)
我也尝试用%和%来逃避各个部分.所以它看起来像"/// @fn%operator!","/// @fn operator%!" 或"/// @fn运算符!" …
对于我正在编写的一段多平台 C++ 代码,我需要一个共享指针。目前该项目不使用 boost,从管理的角度来看,将其引入将极其困难或不可能。但是,我可以使用精选的 C++11 功能,包括共享指针。
标准共享指针存在问题,它们保证线程安全。这意味着在某些平台/编译器上,例如 GCC ( http://tinyurl.com/GCCSharedPtrLockPolicy ) 原子和互斥锁将被不必要地使用,但至少我可以检查并解决由此引起的问题。然后对于其他平台(http://tinyurl.com/msvscSharedPtr),甚至似乎没有一种方法可以检查使用了哪些线程安全机制。原始的 boost 指针只提供最基本的线程安全保证(http://tinyurl.com/SharedPtrThreadSafety)。
我的核心问题是,在某些平台上,原子会导致 CPU 缓存之间代价高昂的同步,而不需要的互斥体可能会导致对操作系统的调用可能由于不完全相关的原因而延迟。此代码将是多线程的,但我们还有其他同步方法用于在线程之间移动数据。根本不需要或不需要线程安全的共享指针。
通常,我更愿意进行基准测试并做出决定,但由于这将在其上运行和移植的平台,我实际上无法这样做。我需要在一些不太流行的平台上进行测试,这些平台往往存在优化程度较低的编译器,但我目前没有这种能力。
我将尝试推动获得 Boost 指针,但这不太可能,当失败时我还有哪些其他选择?与此同时,我将研究试图让 Shared_ptr 脱离 boost,但我认为这并不容易。
我可以自己动手。这似乎是一个糟糕的主意,为什么我必须重新发明这种基本的东西。
如果有一个简单的库并且有足够的许可,那么我可以简单地复制他们的 shared_ptr 代码并简化我自己的滚动。
编辑:除了头文件库之外,从 boost 中提取任何东西都已被剔除。我将按照回答者的建议之一研究 Loki。如果失败并且这里没有答案,我将推出自己的:(。
我正在使用模板函数,我正在传递,我可能会将各种类的实例发送到字符串流.我该怎么做才能确保它继续有效?
让我更具体一点,我在哪里定义行为?是否有一些成员应该在每个类上发送到字符串流,如果我在一些增强或扩展现有的String流(我正在考虑构建一个继承自sstream的类并重载<<运算符来处理所有可能的班)?
我甚至无法找到相关文档,所以即使链接到更多资源也会有所帮助.
我正在与一个图书馆合作,我必须与工会合作.具体来说,我正在使用SDL和SDL_Event联合.我需要复制SDL_Events,我找不到关于使用联合重载赋值运算符的好信息.
如果我可以重载赋值运算符,我应该手动筛选联合成员并复制相关成员,或者我可以简单地来一些成员(这对我来说似乎很危险),或者只是使用memcpy()(这看似简单快速,但有点危险)?
如果我不能超载运营商那么我最好的选择是什么呢?我想我可以制作新副本并传递一堆指针,但在这种情况下我宁愿不这样做.
欢迎任何想法!
编辑:按要求错误消息,顺便说一下,我想我已经学到了一些东西......
physworld.cpp:325: error: no match for ‘operator=’ in ‘CurrentEvent = ((physworld*)this)->physworld::SDL_UserInputEvents.std::queue<_Tp, _Sequence>::pop [with _Tp = SDL_Event, _Sequence = std::deque<SDL_Event, std::allocator<SDL_Event> >]()’ /usr/include/SDL/SDL_events.h:220: note: candidates are: SDL_Event& SDL_Event::operator=(const SDL_Event&)
编辑2:这太愚蠢......我认为Deqeues pop()成员返回了删除的项目.我认为代码非常简单,不能直接成为我的代码,但事实证明这是错误的.
我的代码看起来像:
for(SDL_Event CurrentEvent; !DequeueOfSDLEvents.empty(); CurrentEvent = DequeueOfSDLEvents.pop() )
{
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
所以,如果没有别的,我将学习更仔细地看看我最近没有用过的容器的成员函数.感谢您解释默认情况下的分配工作,否则需要更长的时间才能找到它.
我试图用Ruby脚本替换遗留系统中的组件.该系统的一部分接受包含ASCII'0'和'1'的字符串,显然代表位置的位域.然后它将这些位置转换为逗号分隔的两个代码(大多数是美国州).
我有一个Ruby方法可以做到这一点,但看起来我并没有像Ruby那样做得最好.Ruby有很多内置的方法来迭代和操作数组,我觉得我没有充分利用它们:
# input "0100010010" should return "AZ,PR,WY"
def locations(bits)
# Shortened from hundreds for this post. :u? is for locations I have't figured out yet.
fields = [ :u?, :az, :de, :mi, :ne, :wy, :u?, :u?, :pr, :u? ]
matches = []
counter = 0
fields.each { |f|
case bits[counter]
when '1' then matches << f
when '0' then nil
else raise "Unknown value in location bit field"
end
counter += 1
}
if matches.include(:u?) then raise "Unknown field …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用cmake将程序与OS X上的食人魔和其他一些库链接,但我一直收到此错误:
ld: warning: directory '/Library/Frameworks/SDL.framework/Debug' following -L not found
ld: warning: directory '-framework Cocoa/Debug' following -L not found
ld: warning: directory '-framework Cocoa' following -L not found
ld: warning: directory '/System/Library/Frameworks/OpenAL.framework/Debug' following -L not found
ld: warning: directory '/Library/Frameworks/Ogre.framework/Debug' following -L not found
ld: warning: directory '/opt/local/lib/libogg.dylib/Debug' following -L not found
ld: warning: path '/opt/local/lib/libogg.dylib' following -L not a directory
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre' following -L not found
ld: warning: directory …
Run Code Online (Sandbox Code Playgroud)